Re: [問題] 請問NSButton跟NSButtonCell的關係

看板MacDev作者 (電腦無法阻止人類做蠢事)時間16年前 (2008/04/28 15:41), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《Devon22 ()》之銘言: : NSButon -> NSButtonCell : NSTextField -> NSTextFieldCell : 如上面這些物件,請問NSButtonCell跟NSButton差在哪裡呢? : 我一直搞不懂Cell的用途.. The NSCell class provides a mechanism for displaying text or images in an NSView object without the overhead of a full NSView subclass. It’s used heavily by most of the NSControl classes to implement their internal workings. 上面這段是從NSCell的Overview中取來的. 簡單的說, NSControl是外皮,真正在做事的是NSCell。 舉例來說,NSButton 繼承自NSView, 同時NSButton預設會在內部產生一個NSButtonCell. 當要畫出一個Button的樣子的時候,NSButton會從NSView的DrawRect開始, 在DrawRect內再呼叫NSButtonCell,詢問NSButtonCell想要畫成什麼樣子. 同樣的,當使用者點擊Button時,也依照類似的流程在走. 這裡比較令人困惑的是,為何Apple要做這種設計呢? 會何不直接讓NSButton處理一切?而寧願多加一層NSButtonCell? 在Control vs Cell 為 1 vs 1的情況下,這種設計並沒有明顯的好處。 然而當Control vs Cell為 1 vs N的情況下,就有很明顯的好處了。 首先,Control只需要負責排列Cell的位置,而Cell的外觀與反應, 都可以交由Cell自己決定.在這種情形下,Control可搭配不同的Cell,而做出更多變化. 例如,我們可以在一個Popup menu中,同時呈現文字的menu與圖形的menu。 而所需做的,只是替換cell。 另一個好處,則可以參考Finder的行為。當不同類型的檔案,同時呈現時, 我們可以看到影片檔有影片檔的preview icon,文字檔有文字檔的preview icon。 若是我們想在沒有cell的情況下, 實現這種功能, control就必須同時有處理文字檔 與影像檔的功能,同時,一但有新的檔案類型,就必須將功能加以擴張。 可是若是以現在的架構,當有新的檔案類型時,只要使用新的Cell替代原有的Cell, 即可加以呈現. 以上講的比較粗略,若想更進一步了解, http://developer.apple.com/documentation/Cocoa/Conceptual/ControlCell/ControlCell.html 會是一個不錯的進入點。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.126.49

04/28 22:11, , 1F
感謝說明,雖然還無法完全理解但總算有個概念了
04/28 22:11, 1F
文章代碼(AID): #185N-Ceb (MacDev)
文章代碼(AID): #185N-Ceb (MacDev)