【问题标题】:NSTableView - Initial Selection Grey until Clicked (Focussed)NSTableView - 初始选择灰色,直到点击(焦点)
【发布时间】:2015-11-24 12:48:08
【问题描述】:

我在这里有一个简单的应用示例,我将它拼凑在一起,我得到的几乎就是我想要的。

问题是当视图加载时,在 NSViewController 的 viewDidLoad 中,我将 tableView 的选定索引设置为 0,即第一项(有效)。

我注意到的是,当这种情况发生时,所选行显示为灰色(即好像它不是活动窗口/视图)......当我物理单击时,它似乎仅以正常的蓝色突出显示在选定的行上。

我可以确认行 被选中并且一切正常。

有什么想法吗?

为了确认,我用来选择行的代码是:

override func viewDidAppear() {
    self.tableView.selectRowIndexes(NSIndexSet(index: 0), byExtendingSelection: false)
}

以下是实际视图本身发生的情况:

上图:较深的灰色线是“选择栏”。这就是视图一旦激活就会发生的情况。

上图:一旦我点击那一行(曾经是深灰色的那一行),我就会得到他想要的高光......即海军蓝。

【问题讨论】:

    标签: xcode swift nstableview


    【解决方案1】:

    单元格是灰色的原因是因为表格视图没有焦点/不是第一响应者。

    tableView单元格选择颜色有3种状态

    1. 无选择 = 清除行背景

    2. 选择和焦点 = 蓝色行背景

    3. 选择和无焦点 = 灰色行背景

    这可能是因为另一个视图有焦点。简单地选择一个单元格不会将焦点转移到 tableView。你需要调用 NSWindow.makeFirstResponder() 来改变焦点。

    func tableViewSelectionDidChange(notification: NSNotification) {
        let tableView = notification.object as! NSTableView
        if tableView.selectedRow != -1 {
            self.window!.makeFirstResponder(self.tableView)
        }
    }
    

    【讨论】:

      【解决方案2】:

      我已经设法找出发生了什么事。 (我认为)而且它似乎有效。

      我不得不:

      1. 子类NSTableRowView
      2. 在 Interface Builder 中的实际单元格视图(行)下方添加一个新的 NSView
      3. 将新行视图的类设置为“myNSTableViewSubClass”
      4. 设置 row view 的 Identifier 为:NSTableViewRowViewKey (这个很具体,字面意思就是key,如果不设置,就认为是Table Row View不起作用。
      5. 在子类中,我必须重写 emphasised: Bool 以始终返回 yes,例如:

        override var emphasized: Bool{
            get{
                return true
            }
            set{
                //You need to have the "set" there as it's a mutable prop
                //It doesn't have to do untying though
            }
        }
        

      然后瞧……

      在我的案例中,问题在于上面的 4

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-12
        • 2016-05-03
        • 1970-01-01
        相关资源
        最近更新 更多