应用程序我试图开发的内容主要是围绕能够拥有可编辑的TableView。我开始得出的结论是,大多数问题都源于我没有看到AllowSelectionDuringEditing可用于NSTableView,因为它适用于UITableView。
首先,想深入了解原因。
其次,我如何在我的NSTableView类中实现一个?
最后,我的一个专栏中有一个NSSegmentedControl
。所以我需要在某处实现allowSelectiongWhenFocused
属性,因为虽然我专注于按钮并允许用户使用< - 和 - >使用空格键选择开关,我不希望鼠标/键盘更改所选行。
顺便说一句,虽然我现在知道如何编写自定义UI类并将它们挂钩到Interface Builder中,但我在是否自定义NSTableView
,NSTableRowView
,{{ 1}}或NSTableCellView
。我试图了解NSSegmentedControl
的工作原理。试验和错误并没有把我带到任何地方 - 我修理了一些东西并且让其他东西破坏了。如果有人可以建议除Apple文档之外的任何其他阅读(有时我怀疑它是英文的话)会非常感激。
答案 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
}
}