【问题标题】:How to remove NSTableView's border and change cell selection color as same as Finder's?如何删除 NSTableView 的边框并将单元格选择颜色更改为与 Finder 的相同?
【发布时间】:2015-04-07 09:00:26
【问题描述】:

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

我在界面生成器中添加了一个基于视图的 NSTableView,但边框比优胜美地的 Finder 宽 2 像素且厚。 并且单元格选择颜色为蓝色,而 Yosemite 的 Finder 为灰色。

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

我检查了 Interface Builder 中的设置。 NSTableView 的 frame 设置的超级滚动视图为 (0,0,149,257):

虽然 Clip View 的帧设置为 (1, 1, 147, 255) 且无法更改。

以及如何制作与优胜美地的 Finder 相同的 NSTableView?

非常感谢!

【问题讨论】:

  • 请注意您的滚动视图的描述:“Bordered 滚动视图 - 表格视图”。检查滚动视图的属性并关闭边框。 1 像素分隔线可能来自拆分视图。

标签: macos cocoa nstableview


【解决方案1】:

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

边框应用在封闭的滚动视图周围:

另请注意,标准 NSOutlineView 允许您在 Interface Buider 中调整突出显示样式:

【讨论】:

    【解决方案2】:

    根据我的经验,即使选择了“源列表”突出显示样式,所选行仍会涂成蓝色。为了避免这种情况,我需要通过子类化和添加来防止表格或大纲视图成为第一响应者

    - (BOOL)becomeFirstResponder {
        return NO;
    }
    

    编辑: 事实证明,如果您想支持键盘导航,becomeFirstResponder 实际上很重要。我找到了一个更好的解决方案,它不会覆盖becomeFirstResponder

    首先,使用(覆盖的)空setEmphasized: 方法创建一个自定义NSTableRowView 子类:

    - (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

    【讨论】:

      【解决方案3】:

      给想要移除 NSTableView 边框的人...

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

      1. 在 CustomBox 中嵌入 NSTableView。将 Box BorderType 设置为“无”
      2. 然后将 NSTableView 的约束(左、上、右和下)设置到包含框。将值设置为-2。这样 NSTableView 的边框就会在 Box 之外
      3. 现在在 Storyboard 中,选择 NSTableView 的“clipView(NSClipView)”。 clipView 是 NSTableView 的 superView
      4. 转到尺寸检查器并取消选中“内容插入”的“自动调整”属性
      5. 将值设置为Left=2Top=2Bottom=-2Right=-2

      就是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 2016-04-28
        • 2017-03-06
        • 1970-01-01
        • 2011-08-18
        • 2020-05-14
        相关资源
        最近更新 更多