NSTableView的allowsSelectionDuringEditing属性

时间:2018-01-30 13:23:08

标签: nstableview

应用程序我试图开发的内容主要是围绕能够拥有可编辑的TableView。我开始得出的结论是,大多数问题都源于我没有看到AllowSelectionDuringEditing可用于NSTableView,因为它适用于UITableView。

首先,想深入了解原因。

其次,我如何在我的NSTableView类中实现一个?

最后,我的一个专栏中有一个NSSegmentedControl。所以我需要在某处实现allowSelectiongWhenFocused属性,因为虽然我专注于按钮并允许用户使用< - 和 - >使用空格键选择开关,我不希望鼠标/键盘更改所选行。

顺便说一句,虽然我现在知道如何编写自定义UI类并将它们挂钩到Interface Builder中,但我在是否自定义NSTableViewNSTableRowView,{{ 1}}或NSTableCellView。我试图了解NSSegmentedControl的工作原理。试验和错误并没有把我带到任何地方 - 我修理了一些东西并且让其他东西破坏了。如果有人可以建议除Apple文档之外的任何其他阅读(有时我怀疑它是英文的话)会非常感激。

1 个答案:

答案 0 :(得分:0)

这就是我要做的事情:

子类NSTableRowView并覆盖hitTest(_:)。如果未选择该行,则行视图将返回自身而不是控件。连续的第一次单击选择行,并且不会更改控件的值。

override func hitTest(_ point: NSPoint) -> NSView? {
    let view = super.hitTest(point)
    if view == nil || self.isSelected {
        return view
    }
    else {
        return self
    }
}

实施NSTableViewDelegate' tableView(_:rowViewForRow:)以使用自定义行视图:

func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
    return MyTableRowView()
}

实施NSTableViewDelegate' selectionShouldChange(in:)如果价值无效或其他条件未得到满足,则无法取消选择。

func selectionShouldChange(in tableView: NSTableView) -> Bool {
    let row = tableView.selectedRow
    if (row >= 0) {
        return self.validateRow(row)
    }
    else {
        return true
    }
}