获取NSOutlineView中的行数

时间:2009-12-20 16:38:50

标签: objective-c cocoa

如何获取NSOutlineView中的总行数?

2 个答案:

答案 0 :(得分:7)

有一个名为numberOfRows的方法,它返回一个NSInteger。 例如你的NSOutlineView叫做outlineView:

NSInteger *rows = [outlineView numberOfRows];

此处的文档:

https://developer.apple.com/documentation/appkit/nstableview/

“通常你不应该询问表格查看它有多少行;而应该询问表格视图的数据源。”

如果您真的坚持使用tableView,那么有一个非正式的协议:

– numberOfRowsInTableView: (NSTableDataSource informal protocol)

答案 1 :(得分:4)

这是否包括展开行中的任何从属行?例如,如果foo包含bar,baz和qux,并且已展开,则bar,baz和qux也是可见行。相反,如果foo没有展开,那么bar,baz和qux不是“NSOutlineView中的行” - 它们只存在于你的模型中。

忘记大纲视图。这是无关紧要的,让你困惑。您想知道您拥有多少个模型对象,因此请询问拥有它们的控制器。

人们说“询问数据源”,因为该控制器是应该是视图数据源的对象。但忘记大纲视图,忘记它的数据源属性。直接与控制器通话。问它有多少模型对象。如果你想知道答案的深层版本(你有多少东西,包括其他东西),请问它。无论哪种方式,还要在该控制器中实现一个方法来提供答案。

附录:记住the separation of powers in Cocoa。你有一个模型,它是用户对象形式的数据;视图,向用户显示模型;和控制器,拥有模型和视图。你说这不是一个与绘图有关的问题;这使得它不是一个视图的问题(“你将绘制多少行”),而是一个控制器的问题(“你拥有多少<某种东西>”)。因此,您需要询问控制器。