gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:11:37 26 4
gpt4 key购买 nike

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

我知道我做错了。我一直在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com