如果在 NSTableView 中只选择了一个项目,如何使 NSTextField 只能编辑?
How to make NSTextField only editable if exactly one item is selected in NSTableView?
在主从应用程序中,我的主 table 视图允许多项选择。我使用 NSArrayController 填充 table 视图。
我希望详细视图中的文本字段仅是 editable,当恰好选择主 table 视图中的 一个 项时。
在文本字段的绑定中禁用“允许编辑多个值选择”是不够的,因为它仅在多个选定项目具有不同值时禁用编辑。一旦选择了多个项目,我希望始终禁用编辑。
这可以从界面生成器中实现吗?
一个选项是将 NSTextField
实例的 Editable 状态绑定到 NSArrayController
实例的 selectionIndexes
属性 ,然后使用自定义值转换器将关联的 NSIndexSet
转换为布尔值,其值由索引集中的索引数决定。
Interface Builder 设置如下所示:
值转换器子类如下所示:
@objc(PPSelectionIndexesCountIsExactlyOneTransformer)
public class PPSelectionIndexesCountIsExactlyOneTransformer: NSValueTransformer {
override public class func allowsReverseTransformation() -> Bool {
return false
}
override public class func transformedValueClass() -> AnyClass {
return NSNumber.self
}
override public func transformedValue(value: AnyObject?) -> AnyObject? {
var retval: AnyObject?
if let indexSet = value as? NSIndexSet {
retval = NSNumber(bool: indexSet.count == 1)
}
return retval
}
}
我发现
的组合
- 在
NSArrayController
和 上选择 "Always Use Multi Value Marker"
- 取消选择
NSTextField
的值绑定"Allows Editing Multiple Value Selection"
导致我正在寻找的行为。
在主从应用程序中,我的主 table 视图允许多项选择。我使用 NSArrayController 填充 table 视图。
我希望详细视图中的文本字段仅是 editable,当恰好选择主 table 视图中的 一个 项时。
在文本字段的绑定中禁用“允许编辑多个值选择”是不够的,因为它仅在多个选定项目具有不同值时禁用编辑。一旦选择了多个项目,我希望始终禁用编辑。
这可以从界面生成器中实现吗?
一个选项是将 NSTextField
实例的 Editable 状态绑定到 NSArrayController
实例的 selectionIndexes
属性 ,然后使用自定义值转换器将关联的 NSIndexSet
转换为布尔值,其值由索引集中的索引数决定。
Interface Builder 设置如下所示:
值转换器子类如下所示:
@objc(PPSelectionIndexesCountIsExactlyOneTransformer)
public class PPSelectionIndexesCountIsExactlyOneTransformer: NSValueTransformer {
override public class func allowsReverseTransformation() -> Bool {
return false
}
override public class func transformedValueClass() -> AnyClass {
return NSNumber.self
}
override public func transformedValue(value: AnyObject?) -> AnyObject? {
var retval: AnyObject?
if let indexSet = value as? NSIndexSet {
retval = NSNumber(bool: indexSet.count == 1)
}
return retval
}
}
我发现
的组合- 在
NSArrayController
和 上选择 "Always Use Multi Value Marker"
- 取消选择
NSTextField
的值绑定"Allows Editing Multiple Value Selection"
导致我正在寻找的行为。