我已将 NSTextField
替换为 NSTokenField
,以便我可以执行一些自动完成操作。 NSTextField
的值绑定(bind)到 Controller 类的 NSString
属性。现在,我已将 NSTextField
更改为 NSTokenField
,该值已更改为 NSArray
。
如何使 NSTokenField
值绑定(bind)成为 NSString
?
将值从 NSString
更改为 NSArray
似乎是糟糕的 OO 设计。我认为子类应该能够替换父类(super class),而不需要对子类进行任何修改。
最佳答案
如果您想要的是自动完成,而不是标记化,您可以通过使用普通 NSTextField 并实现委托(delegate)方法来实现此目的:
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index
(这个方法实际上是在 NSControl(NSTextField 的父类(super class))中声明的。)
如果您确实想要进行标记化,那么您必须提供一个 NSArray 以便在标记字段中显示对象值。如 the NSTokenField programming guide 中所述,您提供的数组将是字符串和对象的混合。字符串将按原样显示,任何非字符串对象将在标记字段中显示为标记。您需要实现各种 NSTokenField 委托(delegate)方法来为数组中的每个表示的对象提供要显示的字符串。
看起来确实是 Cocoa Bindings Reference声明绑定(bind)到 NSTokenField 值的对象应该是字符串或数字,但根据我的经验,这是不正确的, token 字段应该绑定(bind)到 NSArray,就像使用 setObjectValue 时一样:
关于cocoa - 如何使 NSTokenField 的值绑定(bind)提供 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442733/