我需要檢測NSToolbar是否已經創建(或將創建)溢出菜單並可能調整窗口大小以使溢出消失。但是我找不到一個簡單的方法來檢測溢出發生了。有沒有辦法在NSToolbar上檢測溢出
2
A
回答
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
返回之後等待一段短暫的延遲,給物品實際添加時間,然後再次檢查溢出。
相關問題
- 1. 有沒有辦法在mysql中檢測溢出?
- 2. 有沒有辦法在div中檢測到垂直溢出時觸發事件?
- 3. 檢測是否溢出沒有javascript
- 4. 有沒有辦法檢測NPLogonNotify
- 5. 在x64上沒有溢出溢出
- 6. 有沒有辦法檢測我是否在文本上懸停?
- 7. 有沒有辦法檢測apk是否存儲在SD卡上?
- 8. 有沒有辦法讓行在引導程序中溢出
- 9. 有沒有辦法檢測Droid X上的按鈕?
- 10. 有沒有辦法檢測SqlConnection上的開放閱讀器?
- 11. 有沒有辦法檢測JTree上是否發生丟棄?
- 12. 有沒有辦法檢測視頻上的臉部特徵?
- 13. 有沒有辦法檢測Outlook郵件是否沒有附件?
- 14. 有沒有辦法讓跨平臺溢出:滾動
- 15. 有沒有辦法監聽div溢出事件?
- 16. 有沒有辦法隱藏垂直溢出的表格?
- 17. 有沒有辦法使用HTML溢出降價表?
- 18. 沒有溢出的減法?
- 19. 有沒有辦法檢測iAd是否顯示「測試廣告」?
- 20. 有沒有辦法檢測在EditText中點擊的字
- 21. 有沒有辦法檢測contextMenu是否在android中打開?
- 22. 有沒有辦法在Javascript中檢測DOM節點的變化?
- 23. 有沒有辦法檢測滾動開始和結束在TreeView?
- 24. 有沒有辦法在Flex 4中檢測屏幕分辨率?
- 25. 有沒有辦法在jQuery中檢測鼠標按鍵?
- 26. 有沒有辦法檢測自定義模塊是否存在?
- 27. 有沒有辦法在純PHP中檢測循環數組?
- 28. 有沒有辦法在Ava中檢測AssertionError
- 29. 有沒有辦法在Javascript/Cordova/HTML5中檢測設備振動?
- 30. 有沒有辦法在class或html中檢測輔助路線?
謝謝!你的checkForToolbarOverflow很好地工作,儘管我必須在不同的地方連接它(打開窗口後我自己的代碼)。我懷疑toolbarWillAddItem中的調用會非常有用,因爲它在添加項目之前運行(並且沒有DidAddItem)。 –
很高興能幫到你!正如我在我的回答中解釋的那樣,'-toolbarWillAddItem:'中的檢查實際上*不起作用,除非要添加的項目最右邊並且會導致工具欄新溢出。如果NSToolbarDelegate包含'-toolbarDidAddItem:',那肯定會很好...... –