2012-05-22 15 views
0

我作爲NSControl子類實現了一個tabbar視圖。NSControl子類不應該改變firstResponder

enter image description here

當我點擊它,AppKit將在嘗試更新我的NSWindow的firstResponder。因爲我不希望tabbar成爲firstResponderacceptsFirstResponder返回NO),NSWindow本身將成爲firstResponder。我的響應者鏈將由窗口和它的控制器組成,並且沒有動作消息被傳遞到tabbar(NSOutlineView)下的子視圖。我希望NSOutlineView在單擊TabBar時繼續接收Action Messages和Events。

什麼是適當的方法來做到這一點?有沒有辦法阻止NSView試圖改變firstResponder點擊時?

我曾考慮將工具欄的nextResponder設置爲NSOutlineView,但Apple建議不要手動更改NSView的nextResponder

回答

0

我最後手動將firstResponder重置爲我的tabbar的委託方法實現中的大綱視圖。

我想出的另一個解決方案是在tabbar中實現這個功能,將firstResponder重置爲原始對象,如果tabbar變成firstResponder

- (void)awakeFromNib { 
    [self.window addObserver:self 
        forKeyPath:@"firstResponder" 
        options:NSKeyValueObservingOptionOld 
        context:nil]; 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
         change:(NSDictionary *)change context:(void *)context { 
    NSResponder *oldResponder = [change objectForKey:NSKeyValueChangeOldKey]; 
    if (self.window.firstResponder == self) { 
     [self.window makeFirstResponder:oldResponder]; 
    } 
}