作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 IB 中,很容易将标签或文本字段绑定(bind)到某些 Controller 的 keyPath。
NSDockTile(可通过 [[NSApp dockTile] setBadgeLabel:@"123"] 获得)不会出现在 IB 中,并且我无法弄清楚如何以编程方式绑定(bind)其“badgeLabel”属性,就像绑定(bind)标签/文本字段一样/表列。
有什么想法吗?
最佳答案
NSDockTile 没有任何绑定(bind),因此您的 Controller 必须手动更新停靠图 block 。您可以使用 KVO 来完成此操作,这与绑定(bind)它具有相同的效果。
创建一个全局上下文:
static void* MyContext=(void*)@"MyContext";
然后,在你的 init 方法中:
[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];
然后,您必须实现此方法才能收到 key 路径更改的通知:
- (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];
}
}
确保当 Controller 对象消失时删除观察者。
关于cocoa - 如何为 NSApp.dockTile 创建绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/416619/
我是一名优秀的程序员,十分优秀!