2014-01-15 19 views
4

我正在使用基於視圖的表格,並且我想爲單元格視圖中的元素創建出口。我無法獲得連接,但它始終是nil如何在表格單元視圖中連接插座?

具體來說,我在表格單元中有一個NSProgressIndicator,並且想要在代碼中操作它。

這是我到目前爲止有:

我創建的NSTableView一個子類,與相應的出口屬性:

@interface MyTableCellView : NSTableCellView 
@property IBOutlet NSProgressIndicator *myProgressIndicator; 
@end 

@implementation MyTableCellView 
-(void)awakeFromNib 
{ 
    // _myProgressIndicator is nil! 
} 
@end 

而且我已經在筆尖設置的自定義類。現有的NSTableCellView通過下拉菜單替換爲MyTableCellView

在這一點上,一些意見:

  • 如果我按Ctrl +單擊並拖動進度指示器連接到此插座,它沒有顯示。 enter image description hereenter image description here

  • 同樣,如果我嘗試按Ctrl +單擊並拖動使用助理編輯的進度指標,我只能通過綁定連接屬性。它不承認這是一個有效的出路。 enter image description here

  • 但是該出口顯示在側邊欄,一個警告,它不存在:enter image description here

  • 我知道正在使用MyTableCellViewawakeFromNib斷點證實了這一點,並確認_myProgressIndicatornil

這是一個沙箱項目,只比我所描述的要多。

那麼,我該如何從代碼訪問這個進度指示器?

回答

0

我不相信你應該那樣做;相反:

  1. 修改表視圖的數據源使用的模型對象以填充表視圖。
  2. 調用表格視圖reloadData(或更好的reloadDataForRowIndexes:columnIndexes:)。

因此,您應該只需要一個表視圖的出口來執行此操作,並且應該在表視圖委託和/或數據源方法內完成對錶視圖的單元對象的任何修改。

+0

您正在描述綁定,但有些事情不可能通過綁定。例如發送'startAnimation'到進度指示器。 – tenfour

+0

@tenfour不,這沒有約束力。它是修改模型的MVC,控制器修改視圖(通過委託/數據源方法)。這是使用表格視圖的直接程序化方法,而綁定是另一回事。 – trojanfoe

+0

@tenfour要添加到我的評論中,您可以輕鬆地將委託/數據源方法的'startAnimation'消息發送到進度指示器。 – trojanfoe

0

正如問題中所述,在Interface Builder中連接插座的常用方法不起作用(也許它已在最新版本的Xcode中修復,我仍在使用早於6的版本)。無論如何,它通過Connections Inspector工作。

  1. 在NSTableCellView的子類中創建一個IBOutlet。
  2. 在您的XIB中,從Identity Inspector將NSTableCellView更改爲您的子類。
  3. 從Connections Inspector中,從您的插座拖動到View對象。