在IB中,很容易將標籤或文本字段綁定到某個控制器的keyPath。如何爲NSApp.dockTile創建綁定
NSDockTile(可通過[[NSApp dockTile] setBadgeLabel:@「123」])不會出現在IB中,我無法弄清楚如何以編程方式綁定其「badgeLabel」屬性,就像您可能綁定標籤/ textfield/table列。
任何想法?
在IB中,很容易將標籤或文本字段綁定到某個控制器的keyPath。如何爲NSApp.dockTile創建綁定
NSDockTile(可通過[[NSApp dockTile] setBadgeLabel:@「123」])不會出現在IB中,我無法弄清楚如何以編程方式綁定其「badgeLabel」屬性,就像您可能綁定標籤/ textfield/table列。
任何想法?
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以創建綁定兼容的子類。
我在數據源上的控制器上試過NSDockTile上bind:toObject:withKeyPath:options:
的很多變體。我找不出可行的組合。或者,是否有一種可以綁定到數據源的BatchController對象,然後更新徽章?我如何獲取NSObject並使其可綁定?
你沒有。如果一個對象沒有明確支持綁定到一個屬性,那麼它可能會做一些事情,使綁定行爲不正常(例如,直接分配給它的ivar)。無論如何綁定它將在你的應用中表現出這種行爲。 – 2009-01-07 03:52:24