objective-c - NSTableView:显示扩展行(动态调整大小)

标签 objective-c macos cocoa nstableview

好的。我浏览了这些建议(它们通常在我提出问题之前就回答了我的问题)。我还没有找到我需要的东西。

我知道我做错了。我一直在 iOS (UIKit) 中这样做,但 NS (Mac) 中的表格与 UIKit 非常不同。

我有一个基于 View 的 NSTableView。每行恰好有 1 列。该列有一个带标题的 View (21 点高)和一个展开 View (行高 420 点)。标题左侧有一个显示三角形,可以切换这两种模式。

Controller 也是表数据源和委托(delegate)。我让行高回调返回 View 的正确值。

标题显示正常。我将行高设置为 21,并且仅显示标题。这会剪辑主视图。

A row of closed headers

当切换显示三角形时,一行会扩展其高度以显示整个 View :

An open row

很简单吧?

问题是B没有显示。我只是得到一个空白(但是,A 正确显示)。项目在那里,只是没有显示。表格行的高度正确(这可以通过使用交替行颜色来验证)。

我尝试在 View 上设置 setNeedsLayout/Draw 。

关于我可能做错了什么的任何线索吗?

我敢打赌我正在做一些愚蠢的事情,我会继续调查这一点。

最佳答案

使用noteHeighOfRowsWithIndexesChanged:?它是一个 NSTableView 函数,而不是一个委托(delegate)函数。

在委托(delegate)函数 tableView:heightOfRow 的文档中声明:

Although table views may cache the returned values, you should ensure that this method is efficient. When you change a row's height you must invalidate the existing row height by calling noteHeightOfRowsWithIndexesChanged:. NSTableView automatically invalidates its entire row height cache when reloadData and noteNumberOfRowsChanged are called.

正如它提到的,NSTableView 的 reloadData 通常也是解决此类问题的懒惰方法。

您的表 Controller 不应该需要您尝试过的setsNeeds[whatever]方法。

此外,说到披露三角形等,在 OSX 上有一个名为 NSOutlineView 的 NSTableView 子类,如果您将数据破坏为记录不完善的树格式,它可以处理项目扩展。如果你的数据不是自然树,我实际上不会推荐它,但你应该意识到它,即使它的 API 很糟糕。哦,单击显示三角形时的展开是动画的。

关于objective-c - NSTableView:显示扩展行(动态调整大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409928/

相关文章:

objective-c - NSDocument init 未在 Storyboard 中的 Split View Controller 的一个 Pane 中调用

ios - Xcode 6 iPair Air 无法在设备上运行应用程序(操作系统版本)

cocoa - 如何使在单独进程中运行的 UI 看起来在我的进程中?

ios - 导航栏右栏按钮项不可见

objective-c - 如何同步 NSScrollView 和 WebView 的滚动?

c++ - 系统头文件/usr/include/i386_types.h错误

java - 无法启动 .jar 文件(使用 LWJGL)

python - 采样/分析 PyObjC 应用程序的最佳方法是什么?

objective-c - 在 xib 文件上设置可访问性标识符

objective-c - [NSArray arrayWithArray :] and [NSArray copy] 之间的区别