如何为NSApp.dockTile创建绑定

时间:2009-01-06 13:58:34

标签: cocoa key-bindings key-value-observing cocoa-bindings nsdocktile

在IB中,很容易将标签或文本字段绑定到某个控制器的keyPath。

NSDockTile(可通过[[NSApp dockTile] setBadgeLabel:@“123”]获得)不会出现在IB中,我无法弄清楚如何以编程方式绑定其“badgeLabel”属性,就像绑定标签/文本字段一样/ table column。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

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];
    }
}

确保在控制器对象消失时移除观察者。

答案 1 :(得分:2)

如果NSDockTile支持绑定,则可以使用方法bind:toObject:withKeyPath:options:在badgeLabel属性上设置绑定。查看文档以获取有关使用哪些参数的详细信息。如果它不起作用,您可以在控制器类中实现键值观察,并在每次值更改时更新标签,或者甚至覆盖NSDockTile以创建绑定兼容的子类。

答案 2 :(得分:0)

我在NSDockTile上,在控制器上,在数据源上尝试了很多bind:toObject:withKeyPath:options:的变体。我无法弄清楚一个有效的组合。或者,是否有一种方法可以将BatchController对象绑定到数据源,然后更新徽章?如何使用NSObject并使其可绑定?