cocoa - 如何使 NSTokenField 的值绑定(bind)提供 NSString?

标签 cocoa cocoa-bindings key-value-coding

我已将 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/

相关文章:

Objective-C 运行时 - 如何使用 setValue 来设置 CGRect

objective-c - 在 Cocoa 中将一个 NSView 替换为另一个 NSView

objective-c - 设置 NSTask 工作目录

objective-c - 如何让AudioQueue播放而不卡住GUI?

objective-c - 更新从文本字段绑定(bind)的属性,无需按 Enter 键

swift - mutableArrayValueForKey : countOf<Key> not being called, countOfSongs

ios - 如何从 KVO 方法 observeValueForKeyPath :ofObject:change:context:? 中的更改字典中获取 int 值

objective-c - 在 Cocoa 中创建 bundle

objective-c - NSTableViewDataSource 还是 NSArrayController?

ios - UIViewController 与 NSViewController