如何删除 NSTableView 的边框并将单元格选择颜色更改为与 Finder 的相同?
How to remove NSTableView's border and change cell selection color as same as Finder's?
我正在为 Yosemite 制作一个 Cocoa 应用程序。
我在界面生成器中添加了一个基于 NSTableView 的视图,但边框比 Yosemite 的 Finder 的边框宽 2 像素且更厚。
单元格选择颜色为蓝色,而 Yosemite 的 Finder 为灰色。
这就是 Yosemite 的 Finder table 视图的样子。
我检查了 Interface Builder 中的设置。
NSTableView的frame设置的超级滚动视图为(0,0,149,257):
而剪辑视图的框架设置为 (1, 1, 147, 255) 且无法更改。
以及如何制作与 Yosemite 的 Finder 相同的 NSTableView?
非常感谢!
Finder 边栏不是 table 视图,而是 源列表 NSOutlineView
:
边框应用在封闭的滚动视图周围:
另请注意,标准 NSOutlineView
允许您从 Interface Buider 中调整突出显示样式:
根据我的经验,即使选择了 "Source List" 突出显示样式,选定的行仍会涂成蓝色。为了避免这种情况,我需要通过子 class 并添加
来防止 table 或大纲视图成为第一响应者
- (BOOL)becomeFirstResponder {
return NO;
}
编辑:
如果您想支持键盘导航,那么 becomeFirstResponder
实际上很重要。我找到了一个更好的解决方案,它不会覆盖 becomeFirstResponder
.
首先,使用(覆盖的)空 setEmphasized:
方法创建自定义 NSTableRowView
subclass:
- (void)setEmphasized:(BOOL)emphasized {
// This avoids a blue background when selected in a source list that has first responder status.
}
然后您可以通过实施
来提供自定义 NSTableRowView
class 的实例
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
在你的 NSTableViewDelegate
.
对于想要删除 NSTableView 边框的人...
我的要求是删除 NSTableView 的边框颜色,使其看起来像一个白色框。尝试了所有的属性和论坛,但找不到方法来做到这一点。最后我在故事板中想出了一个可以解决问题的肮脏黑客。如果有人有更好的选择,请告诉我们。
- 在 CustomBox 中嵌入 NSTableView。将 Box BorderType 设置为 'None'
- 然后将NSTableView 的约束(Left、Top、Right 和Bottom)设置到包含的Box。将值设置为
-2
。这样 NSTableView 边框就会在 Box 之外
- 现在在 Storyboard 中,select NSTableView 的 'clipView(NSClipView)'。 clipView 是 NSTableView 的 superView
- 转到尺寸检查器并取消选中 "Content Insets"
的 'Automatically Adjust' 属性
- 将值设置为
Left=2
、Top=2
、Bottom=-2
和 Right=-2
就是这样。
我正在为 Yosemite 制作一个 Cocoa 应用程序。
我在界面生成器中添加了一个基于 NSTableView 的视图,但边框比 Yosemite 的 Finder 的边框宽 2 像素且更厚。 单元格选择颜色为蓝色,而 Yosemite 的 Finder 为灰色。
这就是 Yosemite 的 Finder table 视图的样子。
我检查了 Interface Builder 中的设置。
NSTableView的frame设置的超级滚动视图为(0,0,149,257):
而剪辑视图的框架设置为 (1, 1, 147, 255) 且无法更改。
以及如何制作与 Yosemite 的 Finder 相同的 NSTableView?
非常感谢!
Finder 边栏不是 table 视图,而是 源列表 NSOutlineView
:
边框应用在封闭的滚动视图周围:
另请注意,标准 NSOutlineView
允许您从 Interface Buider 中调整突出显示样式:
根据我的经验,即使选择了 "Source List" 突出显示样式,选定的行仍会涂成蓝色。为了避免这种情况,我需要通过子 class 并添加
来防止 table 或大纲视图成为第一响应者- (BOOL)becomeFirstResponder {
return NO;
}
编辑:
如果您想支持键盘导航,那么 becomeFirstResponder
实际上很重要。我找到了一个更好的解决方案,它不会覆盖 becomeFirstResponder
.
首先,使用(覆盖的)空 setEmphasized:
方法创建自定义 NSTableRowView
subclass:
- (void)setEmphasized:(BOOL)emphasized {
// This avoids a blue background when selected in a source list that has first responder status.
}
然后您可以通过实施
来提供自定义NSTableRowView
class 的实例
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
在你的 NSTableViewDelegate
.
对于想要删除 NSTableView 边框的人...
我的要求是删除 NSTableView 的边框颜色,使其看起来像一个白色框。尝试了所有的属性和论坛,但找不到方法来做到这一点。最后我在故事板中想出了一个可以解决问题的肮脏黑客。如果有人有更好的选择,请告诉我们。
- 在 CustomBox 中嵌入 NSTableView。将 Box BorderType 设置为 'None'
- 然后将NSTableView 的约束(Left、Top、Right 和Bottom)设置到包含的Box。将值设置为
-2
。这样 NSTableView 边框就会在 Box 之外
- 现在在 Storyboard 中,select NSTableView 的 'clipView(NSClipView)'。 clipView 是 NSTableView 的 superView
- 转到尺寸检查器并取消选中 "Content Insets" 的 'Automatically Adjust' 属性
- 将值设置为
Left=2
、Top=2
、Bottom=-2
和Right=-2
就是这样。