如何删除NSTableView的边框并更改单元格选择颜色与Finder相同?

时间:2015-04-07 09:00:27

标签: macos cocoa nstableview

我正在为Yosemite制作一个Cocoa应用程序。

我在界面构建器中添加了一个基于NSTableView的视图,但边界2像素宽度比Yosemite的Finder更宽。 细胞选择颜色为蓝色,而Yosemite的Finder为灰色。

enter image description here

enter image description here

这就是Yosemite的Finder表视图的样子。

enter image description here

我检查了Interface Builder中的设置。 NSTableView的帧设置的超级滚动视图是(0,0,149,257): enter image description here

剪辑视图的帧设置为(1,1,147,255)且无法更改。

enter image description here

如何制作与Yosemite的Finder相同的NSTableView?

非常感谢!

3 个答案:

答案 0 :(得分:12)

Finder侧边栏不是表格视图,它是来源列表 NSOutlineView

enter image description here

边框应用于封闭的滚动视图:

enter image description here

另请注意,标准NSOutlineView允许您从Interface Buider中调整高亮样式:

enter image description here

答案 1 :(得分:2)

根据我的经验,即使选择了“源列表”高亮样式,选定的行仍然会被涂成蓝色。为了避免这种情况,我需要通过子类化和添加

来防止表或大纲视图成为第一个响应者
- (BOOL)becomeFirstResponder {
    return NO;
}

修改 如果你想支持键盘导航,结果becomeFirstResponder实际上很重要。我找到了一个不会覆盖becomeFirstResponder的更好的解决方案。

首先,使用(重写)空NSTableRowView方法创建自定义setEmphasized:子类:

- (void)setEmphasized:(BOOL)emphasized {
    // This avoids a blue background when selected in a source list that has first responder status.
}

然后,您可以通过实施

提供自定义NSTableRowView课程的实例
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row

NSTableViewDelegate

答案 2 :(得分:0)

对于想要删除NSTableView边框的人......

我的要求是删除NSTableView的边框颜色,这样它应该看起来像一个白色的盒子。尝试了所有的属性和论坛,但找不到办法做到这一点。最后,我在故事板中提出了一个可以解决问题的肮脏黑客。如果有人有更好的选择,请告诉我们。

  1. 将NSTableView嵌入CustomBox中。将Box BorderType设置为“无”
  2. 然后将NSTableView的约束(Left,Top,Right和Bottom)设置为包含Box。将值设置为-2。这样NSTableView边框就会出现在Box
  3. 之外
  4. 现在在Storyboard中,选择NSTableView的'clipView(NSClipView)'。 clipView是NSTableView的超级视图
  5. 转到尺寸检查器并取消选中“内容插件”的“自动调整”属性
  6. 将值设置为Left=2Top=2Bottom=-2Right=-2
  7. 多数民众赞成。