NSTableView仅显示"表视图单元格"

Kyl*_*yle 31 cocoa objective-c nstableview

我有一个NSTableView,委托和数据源指向我的控制器.我试过实施

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
Run Code Online (Sandbox Code Playgroud)

方法,但无论我返回什么,表总是在数据中显示"表视图单元格".我可能做错什么的想法?附上两张照片,显示我已正确设置了委托(它还显示了正确的行数).

表格显示了什么 在此输入图像描述

请注意,我也尝试过返回@"Hello World"所有内容,但我得到了相同的结果.

小智 55

只需在IB中更改表视图的Content Modeto Cell Based.IB将显示Text Cell为单元格占位符,它们在运行时由您返回的任何内容填充tableView:objectValueForTableColumn:row:


Kyl*_*yle 10

终于想通了.我的单元格由于某种原因似乎包含TableCellView和文本字段单元格.我删除了Table Cell View,现在一切正常.我不知道我是怎么进入那个州的.

在此输入图像描述

  • 这是因为您在IB中使用Lion中的新视图模式,但tableView:objectValueForTableColumn:row:用于旧单元格方法. (2认同)

Gau*_*rav 9

较新版本的XCode:

  1. 选择表视图(确保未选择滚动视图或任何其他视图).
  2. 在右侧,选择"属性检查器"
  3. 将内容模式更改为"基于单元格"而不是"基于视图"
  4. 保存更改并重新运行项目.


psm*_*irl 6

大多数响应涉及将表视图组件转换为基于单元格的表视图.如果这就是你想要的那么那就没事了,你很高兴.在提出问题时,基于单元格的表格是常态,当Apple将窗口组件更改为基于视图的组件时,显然会引起很多混乱.今天,Apple的文档建议您应该使用基于视图而不是基于单元格的表.

如果您- tableView:objectValueForTableColumn:row:在数据源中使用,则会出现问题中描述的问题.您不能将此方法用于基于视图的表,它仅适用于基于单元格的表.相反,您需要使用该NSTableViewDelegate方法- tableView:viewForTableColumn:row:.您不需要使对象符合NSTableViewDelegate协议以使用此方法,但必须将其设置为表的委托.

回应Cœur,引用Apple在线文档.

仍支持基于NSCell的表在OS X v10.6及更早版本中,每个表视图单元都必须是NSCell的子类.这种方法在设计复杂的自定义单元时造成了限制,通常需要您编写自己的NSCell子类.提供动画,例如进度视图,也非常困难.在本文档中,这些类型的表视图称为基于NSCell的表视图.OS X v10.7及更高版本继续支持基于NSCell的表,但它们通常仅用于支持遗留代码.通常,您应该使用基于NSView的表.