0

在我的 Mac 应用程序中,我设置了两个 NSSplitView 来创建邮件样式界面(第一个 ScrollView 用于创建垂直分隔符,第二个嵌套在第一个中,以创建水平分隔符)。为了说明界面,我创建了下图:

替代文字 http://img96.imageshack.us/img96/1091/setupn.png

为了进一步说明设置,这是我的视图层次结构的注释快照:

替代文字 http://img714.imageshack.us/img714/8153/yayaj.png

我遇到的问题是,当尝试抓取托管在我的 NSSplitView 的 B 和 C 部分中的两个 NSTableView 的帧时,我收到了相对坐标。这是我正在使用的代码:

NSRect aTableViewFrame = [aTableView frame];
NSRect bTableViewFrame = [bTableView frame];
NSLog(@"%@ %@", NSStringFromRect(aTableViewFrame), NSStringFromRect(aTableViewFrame));

这是我看到的输出:

{{0, 0}, {760, 143}} {{0, 0}, {760, 392}}

从返回的 NSRect 值可以看出,我得到了 NSTableView 的正确宽度和高度,但我真正想要的是它们相对于父 NSSplitView 的位置。当然,我可以使用(多个)IBOutlets 并自己构建正确的 rect 值,但我真正想要的是一种简单的方法来获取 NSTableViews 相对于父 NSSplitView 或包含窗口的框架。

4

2 回答 2

1

您获得这些值的原因是因为 NSTableViews 不是 NSSplitView 的直接子视图。首先,NSTableView 实际上包含在 NSScrollView 中,根据您的 IB 屏幕截图,它又包含在另一个普通的 NSView 中(您在大纲中看到的“自定义视图”)。

如果是我,我会选择只为拆分视图的直接子视图创建一个出口的路线,或者通过在拆分视图上调用 -subviews 来访问它们,而不是尝试从表视图向上导航层次结构. 在我看来,这些选项中的任何一个似乎都没有从表格视图向上工作那么脆弱。

但是,如果您想从表视图转到拆分视图的子视图,这应该可以解决问题:

NSRect aTableViewFrame = [[[aTableView enclosingScrollView] superview] frame];
于 2010-06-27T22:30:21.560 回答
1

如果您有拆分视图,或者通过设置插座来获得它,您可以使用convertRect:fromView:. 或者要获取窗口相对坐标,您可以使用convertRectToBase:. 请记住,表格的框架将与其父视图相关,因此您可以使用类似[[bTableView superView] convertRectToBase: bTableViewFrame].

于 2010-06-27T23:02:40.160 回答