2014-09-23 52 views
1

有沒有辦法以編程方式關閉NSComboBox彈出窗口?NSComboBox以pogrammatically方式關閉彈出窗口

彈出窗口打開時,似乎有一個NSComboBox的錯誤,並且控件get被刪除然後釋放。出於某種原因,NSComboBox的dealloc在破壞之前不會清除彈出窗口。

編輯:只是澄清 - 這個錯誤只發生在彈出列表打開時。否則,該控件將被正確且乾淨地釋放。

編輯編輯: 這是如何重現它。

  • 創建一個新的Cocoa應用程序。
  • 關閉自動引用計數。
  • In @(applicationDidFinishLaunching)創建一個新的NSComboBox並將其存儲到成員中。
  • 將組合框添加到窗口的contentView。
  • 使用鍵盤快捷鍵創建新的菜單項並綁定到選擇器。
  • 在菜單項的選擇器中:從視圖中移除組合框並釋放成員。不要忘記將它重新設置爲零。
  • 運行該應用程序。
  • 單擊組合框顯示彈出。
  • 使用快捷方式刪除組合框。
+0

我會假設,調用'abortEditing'將關閉它的型號關鍵路徑。我不確定你在說什麼「在破壞之前不清除彈出窗口」。彈出窗口是'NSComboBox'的一部分,所以必須發佈。你有沒有保留它? – 2014-09-23 16:02:04

+0

是的,你說得對,控件在釋放時應該銷燬彈出窗口,但它不是 - 我認爲這是一個錯誤。用一個乾淨的項目很容易複製。 – AndyTang 2014-09-23 16:48:02

+0

@(abortEditing)確實有用!然而,它將彈出窗口留下來,因爲它沒有關閉它 - 但它不再崩潰,因爲它不會嘗試訪問由於@(abortEditing)清理某些東西而已被刪除的內容。 – AndyTang 2014-09-23 16:49:41

回答

-2

你可以在你的代碼進行檢查,或通過使用NSComboBox委託方法-comboBoxWillPopUp:-comboBoxWillDismiss:來控制BOOL變灰的菜單項。

BOOL屬性可用於控制菜單項的啓用。

設置組合框的代表。

到委託的界面添加

@property BOOL itemEnabled;

,並實施itemEnabled

- (void)comboBoxWillPopUp:(NSNotification *)notification { 
    self.itemEnabled = NO; 
} 
- (void)comboBoxWillDismiss:(NSNotification *)notification { 
    self.itemEnabled = YES; //re-enabled when dismissed 
} 

設置初始值增加YES

在XIB菜單項的Enabled屬性綁定到委託並設置爲self.itemEnabled

+0

這有助於檢查彈出窗口的狀態,但不能實際關閉彈出窗口 – 2015-11-19 15:08:42