2011-05-24 50 views
8

我一直在閱讀有關NSButtons和單元格的Apple文檔,我似乎無法理解兩者之間的區別。除了這種複雜性,看起來他們都有像setTitle:等方法的大量重疊,我不知道我應該使用哪些。NSButtonCell vs NSButton

任何人都可以解釋基本的區別是什麼?

感謝,
Teja公司

回答

8

呦你可以將控制想象成一個單元的代表或「代理」。 該控件是一個NSView,這意味着在這些情況下兩個重要的事情。首先,它代表了一個窗口的區域,其次是它接受用戶交互。

儘管如此,控制本身並沒有太大的作用。細胞就是完成所有工作的東西 - 例如,注意細胞可以將自己吸引到給定的框架中。這是一種觀點的責任,但是控制將這種情況推遲到細胞,只是提供一個繪圖區域。同樣,當用戶點擊一個控件時,控件接收到該事件並計算出它的含義,但是響應該事件執行一個動作的工作被傳遞給該單元。

如果你看看各種控制/單元對的文檔(NSButtonNSButtonCell就是這樣一對),你會看到提及「覆蓋」方法。這意味着該控件具有與其對應單元相同名稱的方法,該方法只需調用該單元的名稱即可。這是你提到的重複的來源。當你想使用這些方法中的一種時,在控制器上調用它 - 作爲這一對的公共面孔,它很可能簡單地問單元。

在Control and Cell Programming Topics指南中,Apple提供的最佳交互描述是"How Controls and Cells Interact"


在具有誰採購演出代理一個演員的感覺。
這並不完全正確的所有意見;它實際上是的一個功能,從NSView繼承。

+0

我看到它和UIView和CALayer是一樣的嗎? – onmyway133 2016-01-18 15:33:55

-2

NSButton單元具有繪圖和行爲很多更cutomizable選項。的差異更清楚地看到在他們從(NSButtonCell從ActionCell類繼承繼承的類,而NSButton從的NSControl類繼承

在文檔更好看看:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSButton_Class/Reference/Reference.html

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSButtonCell_Class/Reference/Reference.html

你應該選擇根據您要如何繪製和行爲的按鈕。如果你想,一個簡單的按鈕使用NSButton。

+0

我不知道我跟着你。 「NSButtonCell」不是「NSButton」的一部分嗎?我認爲分配'NSButton'並調用'[button cell]'返回與它關聯的'NSButtonCell'。這就是我所困惑的。 – 2011-05-24 17:03:36

2

摘自Cocoa Programming for OS X: The Big Nerd Ranch Guide

「細胞處理控制的實現細節。對於大多數部分,單元格的屬性和方法在相應的控件中被相同的屬性和方法「覆蓋」。對於 實例,當您更改標籤上的標題時,標籤的單元格 正在執行該工作,但您將與該標籤的stringValue 屬性進行交互。

細胞在可可中有很長的歷史。它們最初被添加用於解決性能問題 :控制的許多基本任務都被交給了單元,這可以比控制更有效地執行更多 。

Mac電腦比當時更強大 ,電池已成爲一種負擔。 蘋果已經表示,它是在貶低細胞的過程,但 你仍然會看到他們在你的文檔大綱,並在舊的代碼。」

0

NSButtonCell是用來實現的用戶界面的NSActionCell一個子類按鈕,開關和單選按鈕。它也可以用於視圖的任何其他區域,該區域旨在單擊時向目標發送消息。 NSControlNSButton子類使用單個NSButtonCell。要創建交換機組或單選按鈕,請使用NSMatrix,其中包含一組NSButtonCell