在 IB 中,很容易将标签或文本字段绑定到某个控制器的 keyPath。
NSDockTile(可通过 [[NSApp dockTile] setBadgeLabel:@"123"] 获得)未出现在 IB 中,我无法弄清楚如何以编程方式绑定其“badgeLabel”属性,就像您可能绑定标签/文本字段/表格列一样.
有任何想法吗?
在 IB 中,很容易将标签或文本字段绑定到某个控制器的 keyPath。
NSDockTile(可通过 [[NSApp dockTile] setBadgeLabel:@"123"] 获得)未出现在 IB 中,我无法弄清楚如何以编程方式绑定其“badgeLabel”属性,就像您可能绑定标签/文本字段/表格列一样.
有任何想法吗?
NSDockTile 没有任何绑定,因此您的控制器必须手动更新停靠图块。您可以使用 KVO 执行此操作,这与绑定它具有相同的效果。
创建一个全局上下文:
static void* MyContext=(void*)@"MyContext";
然后,在您的 init 方法中:
[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];
然后,您必须实现此方法以通知密钥路径的更改:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (context == MyContext) {
[[NSApp dockTile] setBadgeLabel:[object valueForKeyPath:keyPath]];
}
else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
确保在控制器对象消失时移除观察者。
如果 NSDockTile 确实支持绑定,您可以使用该方法bind:toObject:withKeyPath:options:
在 badgeLabel 属性上设置绑定。查看文档以获取有关使用哪些参数的详细信息。如果它不起作用,您可以在控制器类中实现键值观察并在每次值更改时更新标签,或者甚至覆盖 NSDockTile 以创建绑定兼容的子类。
我bind:toObject:withKeyPath:options:
在 NSDockTile、控制器、数据源上尝试了很多变体。我想不出一个有效的组合。或者,有没有办法让 BatchController 对象绑定到数据源,然后更新徽章?如何获取 NSObject 并使其可绑定?