1

NSComboBox ポップアップをプログラムで閉じる方法はありますか?

ポップアップが開いているときに NSComboBox にバグがあるようで、コントロールが削除されてから解放されます。何らかの理由で、NSComboBox の dealloc は、破棄する前にポップアップをクリアしません。

編集:明確にするために-このバグは、ポップアップリストが開いているときにのみ発生します。それ以外の場合、コントロールは適切かつクリーンに解放されます。

編集編集:これはそれを再現する方法です。

  • 新しい Cocoa アプリケーションを作成します。
  • 自動参照カウントをオフにします。
  • @(applicationDidFinishLaunching) で、新しい NSComboBox を作成し、メンバーに保存します。
  • コンボ ボックスをウィンドウの contentView に追加します。
  • キーボード ショートカットを使用して新しいメニュー項目を作成し、セレクターにバインドします。
  • メニュー項目のセレクター: ビューからコンボ ボックスを削除し、メンバーを解放します。nil に戻すことを忘れないでください。
  • アプリケーションを実行します。
  • コンボボックスをクリックして、ポップアップを表示します。
  • ショートカットを使用して、コンボ ボックスを削除します。
4

1 に答える 1

-2

NSComboBoxデリゲート メソッド-comboBoxWillPopUp:を 使用し-comboBoxWillDismiss:て BOOL を制御することにより、コード内でチェックを実行したり、メニュー項目をグレー表示したりできます。

プロパティを使用して、メニュー項目のBOOL有効化を制御できます。

コンボ ボックスのデリゲートを設定します。

デリゲートのインターフェースに追加

@property BOOL itemEnabled;

そして実装に追加

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

の初期値をitemEnabledに設定しYESます。

xib で、メニュー項目の Enabled 属性をデリゲートにバインドし、Model Key Path を次のように設定します。self.itemEnabled

于 2014-09-24T15:41:59.280 に答える