我已将NSTextField替换为NSTokenField,以便可以执行一些自动补全。 NSTextField的值绑定到控制器类的NSString属性。现在,我已将NSTextField更改为NSTokenField,值已更改为NSArray

如何使NSTokenField值绑定成为NSString

将值从NSString更改为NSArray似乎是错误的OO设计。虽然我认为子类应该能够在不对子类进行任何修改的情况下替换超类。

最佳答案

如果您只需要自动完成而不是令牌化,则可以通过使用普通的NSTextField并实现委托方法来实现此目的:

- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index


(此方法实际上是在NSTextField的超类NSControl中声明的。)

如果确实要进行令牌化,则必须提供一个NSArray,以便将对象值显示在令牌字段中。如the NSTokenField programming guide中所述,您提供的数组将是字符串和对象的混合。字符串将按原样显示,所有非字符串对象将在标记字段中显示为标记。您将需要实现各种NSTokenField委托方法,以提供一个要为数组中每个表示的对象显示的字符串。

看来Cocoa Bindings Reference指出绑定到NSTokenField值的对象应该是字符串或数字,但是以我的经验,这是不正确的,并且令牌字段应该绑定到NSArray,就像使用时一样。 setObjectValue:

关于cocoa - 如何使NSTokenField的值绑定(bind)提供NSString?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/442733/

10-09 08:02