allowsSelectionDuringEditing 属性 用于 NSTableView
allowsSelectionDuringEditing property for NSTableView
我正在尝试开发的应用程序主要围绕能够拥有可编辑的 TableView 而构建。我开始得出结论,我的大部分(如果不是全部)问题都源于这样一个事实,即我没有看到 allowsSelectionDuringEditing 可用于 NSTableView,因为它适用于 UITableView。
首先,想深入了解原因。
其次,如何在我的 NSTableView 中实现一个 class?
最后,我的一个专栏中有一个 NSSegmentedControl
。所以我需要在某个地方实现 allowSelectiongWhenFocused
属性 ,因为虽然我专注于按钮并允许用户使用 <- 和 -> 空格键到 select 开关,但我不不希望鼠标/键盘更改 selected 行。
顺便说一句,虽然我现在知道如何编写自定义 UI classes 并将它们挂接到 Interface Builder 中,但我正在努力 when/whether 自定义 NSTableView
、NSTableRowView
、NSTableCellView
或 NSSegmentedControl
。我也试图了解 refuseFirstResponder
的工作原理。反复试验并不能使我到达任何地方——我修复了一些东西,又破坏了一些其他东西。如果有人可以建议除了 Apple 文档之外的任何其他阅读材料(有时我怀疑它是不是英文的),我将不胜感激。
我会这样做:
子类 NSTableRowView
并覆盖 hitTest(_:)
。如果未选择行,则行视图 returns 本身而不是控件。第一次单击一行会选中该行并且不会更改控件的值。
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
}
}
我正在尝试开发的应用程序主要围绕能够拥有可编辑的 TableView 而构建。我开始得出结论,我的大部分(如果不是全部)问题都源于这样一个事实,即我没有看到 allowsSelectionDuringEditing 可用于 NSTableView,因为它适用于 UITableView。
首先,想深入了解原因。
其次,如何在我的 NSTableView 中实现一个 class?
最后,我的一个专栏中有一个 NSSegmentedControl
。所以我需要在某个地方实现 allowSelectiongWhenFocused
属性 ,因为虽然我专注于按钮并允许用户使用 <- 和 -> 空格键到 select 开关,但我不不希望鼠标/键盘更改 selected 行。
顺便说一句,虽然我现在知道如何编写自定义 UI classes 并将它们挂接到 Interface Builder 中,但我正在努力 when/whether 自定义 NSTableView
、NSTableRowView
、NSTableCellView
或 NSSegmentedControl
。我也试图了解 refuseFirstResponder
的工作原理。反复试验并不能使我到达任何地方——我修复了一些东西,又破坏了一些其他东西。如果有人可以建议除了 Apple 文档之外的任何其他阅读材料(有时我怀疑它是不是英文的),我将不胜感激。
我会这样做:
子类 NSTableRowView
并覆盖 hitTest(_:)
。如果未选择行,则行视图 returns 本身而不是控件。第一次单击一行会选中该行并且不会更改控件的值。
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
}
}