0

在 IB 中创建了一个 TableView,并且希望它只有一列带有复选框。创建复选框的一种方法是使用 IB 将 NSButtonCell 拖到列中,然后符合 NSTableViewDataSource 协议实现:

- (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 中有一个复选框?

谢谢。

4

1 回答 1

0

I think you are finding it difficult to understand the difference between Model,View and the Controller.

Your Class object should only act as "Model" - in your case supply the on/off state data. Your IB provides the "View" part ,Normally you should use it for creating any user interface. Your View Controller class which impliments tableview delegate/datsource methods is the"Controller" part and you should use it as a mediator between View and Model.

You can choose to provide button state along with title in your Model. and can set it in your Controllers implementation of the delegate/datasource method.

Yes, you can create button cells in your controller but avoid it unless it is absolutely necessary.

You can mix different types of cells,Instead you can choose to look into the View based TableView also.

于 2013-07-03T11:55:49.263 回答