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


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

10-06 05:14
查看更多