带有自定义单元格的 NSTableView
看来我已经寻找了很长时间,但还没有找到一个很好的、简单的答案来解决我的问题。
我正在将 XCode 与 Cocoa/ObjC 结合使用,并尝试创建一个 NSTableView ,它将 NSDictionary/Array 中的值加载到单元格的不同部分中。
例如,我试图将 NSImage、NSTextField 和其他项目放入自定义单元格(以及背景图像)。 然而,我找不到如何创建这个的简单答案。
我已经用 UITableViews 为 iPhone 编写代码有一段时间了,但似乎找不到与 NSTableViews 类似的方法。
任何帮助都会非常好!
谢谢多米尼克
it seems I've been searching for a long time and haven't found a great, easy, answer to my problem.
I'm using XCode with Cocoa/ObjC and am trying to create an NSTableView which will load values from an NSDictionary/Array into different sections of a cell.
For example, I'm trying to get an NSImage, NSTextField and other items into a custom cell (along with a background image). However, I can't find a simple answer to how to create this..
I've been coding for the iPhone with UITableViews for a while now and can't seem to find a similar way with NSTableViews.
Any help would be really great!
Thanks
Dominic
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
NSTableView 有
-tableView:dataCellForTableColumn:row:
。 只需在委托中创建 NSCell 子类,如果需要对该行进行自定义,则返回它。 如果您只是对表视图中的每一行使用自定义单元格,您也可以仅使用 IB 来设置自定义单元格类。表视图将根据需要复制单元格,因此您可以将单元格保留为实例变量(如果这样会更有效)。 表视图上的数据源方法或绑定按正常方式工作,只是您将返回填充的字典而不是单个字符串或数字。 您也可以将自定义模型对象直接传递到表格视图,尽管您必须使其可复制,或者重写单元格中的
setObjectValue:
以将其包装在 NSValue 中。如果是 NSCell 的子类化给您带来了麻烦,那么这可能是一次学习经历。 从
-drawWithFrame:inView:
开始绘制所有自定义对象,并在需要更多功能时从那里开始。NSTableView has
-tableView:dataCellForTableColumn:row:
. Just create your NSCell subclass in your delegate and return it if you need customization for that row. If you're just using your custom cell for every row in the table view, you can also just use IB to set the custom cell class.The table view will copy the cell as needed, so you can keep the cell as an instance variable if it would be more efficient. The data source methods or bindings on the table view work as they normally would, only you'll return your populated dictionary instead of a single string or number. You could also pass a custom model object directly to the tableview too, although you'll have to make it copyable, or override
setObjectValue:
in your cell to wrap it in an NSValue.If it's subclassing NSCell that's giving you trouble, that can be a bit of a learning experience. Start with
-drawWithFrame:inView:
to draw all your custom objects, and go from there as you need more functionality.观看 WWDC 2011 视频“基于视图的 NSTableView 基础到高级”(第 120 节)
https:// developer.apple.com/videos/wwdc/2011/
这适用于 Lion (10.7) 及更高版本。
Watch the WWDC 2011 video "View Based NSTableView Basic to Advanced" (Session 120)
https://developer.apple.com/videos/wwdc/2011/
This applies to Lion (10.7) and higher.
一个单元格一次只能保存一个对象值。 使用图像和字符串/属性字符串作为属性创建一个模型对象,并用它填充表视图。
此外,文本字段也是一个视图。 你的模型不应该知道它的表现——这是你的视图的工作。
A cell can only hold one object value at a time. Make a model object with the image and string/attributed string as properties, and populate the table view with that.
Also, a text field is a view. Your model should know nothing of its presentation—that's your views' job.