2013-11-26 81 views

回答

1

NSToolbar有兩種方法可以用來解決這個問題。 -items返回工具欄中的所有當前項目,包括溢出菜單中的項目。 -visibleItems只返回可見的項目,不包括溢出菜單中的項目。如果這兩個方法返回的數組不匹配(或者不包含相同數量的項目),那麼您知道工具欄已經溢出。當窗口調整大小時,或者當項目添加到工具欄或從工具欄中刪除項目時,溢出狀態可能會更改。所以,你可以做這樣的事情:

- (void)checkForToolbarOverflow 
{ 
    if ([[self.toolbar items] count] > [[self.toolbar visibleItems] count]) { 
     NSLog(@"Overflow!"); 
    } else { 
     NSLog(@"No overflow"); 
    } 
} 

- (void)windowDidResize:(NSNotification *)notification 
{ 
    [self checkForToolbarOverflow]; 
} 

- (void)toolbarDidRemoveItem:(NSNotification *)notification 
{ 
    [self checkForToolbarOverflow]; 
} 

- (void)toolbarWillAddItem:(NSNotification *)notification 
{ 
    [self checkForToolbarOverflow]; 
} 

這有一個缺陷,即它會錯誤地報告沒有溢出如果一個新的項目,在工具欄的末尾添加,並且項目導致溢出。事實證明,在調用-toolbarWillAddItem:時,要添加的項目不在items或visibleItems數組中(正如您所期望的那樣,因爲它尚未添加)。但是,visibleItems數組已更新以反映新近不可見的項目。只要新項目不是唯一的不可見項目,這很好,因爲它不會在項目數組中。

我的解決方法並不理想,但我還沒有想出更好的東西。這只是在-toolbarWillAddItem返回之後等待一段短暫的延遲,給物品實際添加時間,然後再次檢查溢出。

+0

謝謝!你的checkForToolbarOverflow很好地工作,儘管我必須在不同的地方連接它(打開窗口後我自己的代碼)。我懷疑toolbarWillAddItem中的調用會非常有用,因爲它在添加項目之前運行(並且沒有DidAddItem)。 –

+0

很高興能幫到你!正如我在我的回答中解釋的那樣,'-toolbarWillAddItem:'中的檢查實際上*不起作用,除非要添加的項目最右邊並且會導致工具欄新溢出。如果NSToolbarDelegate包含'-toolbarDidAddItem:',那肯定會很好...... –

相關問題