【发布时间】:2018-01-30 13:23:08
【问题描述】:
我正在尝试开发的应用程序主要是围绕能够拥有可编辑的 TableViews 构建的。我开始得出结论,如果不是所有问题,我的大部分问题都源于这样一个事实,即我看不到 NSTableView 可以使用 allowSelectionDuringEditing ,因为它适用于 UITableView。
首先,想了解原因。
其次,如何在我的 NSTableView 类中实现一个?
最后,我的一个专栏中有一个NSSegmentedControl。所以我需要在某处实现allowSelectiongWhenFocused 属性,因为虽然我专注于按钮并允许用户使用 和空格键来选择开关,但我不希望鼠标/键盘更改选定的行。
顺便说一句,虽然我现在知道如何编写自定义 UI 类并将它们连接到 Interface Builder 中,但我还在纠结何时/是否自定义 NSTableView、NSTableRowView、NSTableCellView 或 NSSegmentedControl。我试图了解refuseFirstResponder 的工作原理。反复试验并没有让我到任何地方 - 我修复了一些东西并打破了一些其他东西。如果有人可以建议除 Apple 文档之外的任何其他阅读材料(有时我怀疑它是否是英文的),我将不胜感激。
【问题讨论】:
-
使用
NSTableViewDelegate方法selectionShouldChange(in:)。 -
是的,我已经做到了。这是我的问题。
-
是的,如果我的单元格中只有 NSTextFields,我已经做到了,并且工作得很好。如果应该保存当前选定的行,我会捕获该通知并提示用户。问题是当我添加另一个控件(例如 NSSegmentControl)并且用户在另一行的该列中单击时,我没有收到
selectionShouldChange通知。所以我需要防止用户选择另一行,直到我完成我的 NSSegmentControl - 即直到我停止编辑我的行 - 只有“编辑”不像文本字段编辑而是选择我的段 -
等一下,我应该仔细阅读的。我现在明白威勒克在说什么了。但是,为了防止选择更改,如何检测我的 NSSegmentControl 具有“焦点”并且仍在“编辑”?我想我可以使用 tableView.selectedRow 来获取 rowView 然后导航到 NSSegmentControl。然后呢?即使那样仍然不确定如何防止在段控件中的另一行中单击
-
那么只有选中的行可以编辑,并且该行必须有效才能选择另一行?当用户单击另一行中的控件时,该控件应该处理单击还是应该首先选择该行并由控件处理下一次单击?
标签: nstableview