2013-06-25 38 views
0

TableView是在IB中創建的,希望它只有一列帶有複選框。創建對應的複選框的一種方法是拖動NSButtonCell成使用IB柱,然後符合NSTableViewDataSource協議實現:在創建NSButtonCell(s)的列中使用NSButtonCell的tableview中?

- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 

因此,當一個類對象是在TableView中充當數據源到一個列中,並且該列包含對象,如每行的複選框,是僅爲複選框提供開/關狀態數據的類,還是提供複選框對象?

相關的問題是:

  1. 是對TableView中創建和含NSButtonCells?
  2. 如果答案是1,那麼如何設置/更改NSButtonCell的屬性,如其標題?
  3. 而不是TableView創建和維護NSButtonCells,數據源類可以創建它們嗎?也就是說,不用IB來將NSButtonCell拖到列中,可以在諸如awakeFromNIB之類的方法中添加NSButtonCells嗎?
  4. 是否有混合給定列中單元格對象類型的方法?例如,是否可以在column1row1中有文本標題,然後在column1row2中有複選框?

謝謝。

回答

0

我認爲你很難理解模型,視圖和控制器之間的區別。

您的Class對象只能作爲「Model」 - 在您的情況下提供開/關狀態數據。 您的IB提供「查看」部分,通常您應該使用它來創建任何用戶界面。 您的View Controller類實現tableview委託/數據源方法是「控制器」部分,您應該將其用作視圖和模型之間的中介。

您可以選擇在模型中提供按鈕狀態和標題。 ,並可以在您的控制器實現委託/數據源方法中進行設置。

是的,你可以在你的控制器中創建按鈕單元格,但要避免它,除非它是絕對必要的。

您可以混合使用不同類型的單元格,您也可以選擇查看基於View的TableView。

+0

我完全理解模型,視圖,控制器。我認爲我沒有收到我的問題(來自你或任何人)的詳細答案的原因是,TableView上的細節可能不再廣爲人知。在我找到一個我認爲給出詳細信息的書之前,我必須看看很多Cocoa書籍。Cocoa編程 作者:Scott Anguish,Erik M. Buck,Donald A. Yacktman(發佈日期2002)有一個關於TableView的部分,它提供了詳細信息我所評論的新的可可書籍似乎都沒有。 – bhartsb

+0

我已經知道如何設置複選框的狀態。我不知道的是問題#2:如何設置/更改NSButtonCell的屬性,如其標題?通過設置標題,我的意思是每個單元格的複選框(在單個列表中)都有自己的標題,而不是所有標題都是相同的。同樣地,如何讓某些單元格的單列中的行包含複選框,而其他單元格包含textfieldCell(就像複選框的分組標題的區段標題一樣)。 – bhartsb

+0

本書規定,默認情況下,表中的條目是NSTextFieldCell對象,每列有一個單元對象,該列由該列的所有行共享。因此,爲了設置複選框的標題,可以:a)NSTableColumn的子類,b)覆蓋方法 - (id)dataCellForRow:(int)行,並在此重寫方法的主體中獲取列的共享單元對象這種情況下,一個NSButtonCell複選框從超類拖到IB中的colummn)並設置一個唯一標題。 – bhartsb

相關問題