2011-07-11 6 views
2

ステータス項目内にテキストフィールドがあり、ステータス項目をクリックするとすぐにアクティブにしたいと考えています。私はいつもbecomeFirstResponderapplicationDidFinishLaunchingに、その後awakeFromNibで試しましたが、動作しませんでした。これらのメソッドが起動時に呼び出されたときにステータス項目のメニューが開いていないことが考えられます。おそらく無視しています。次に、ステータスアイテムがクリックされたときにアクションを設定しようとしましたが、ステータスアイテムにドロップダウンメニューがない場合にのみ実行可能と言われていました。私が望むのは、ステータス項目をクリックし、テキストフィールドがアクティブになった状態でドロップダウンメニューが表示されるので、入力をすぐに開始できます。メニューのテキストフィールドを表示するためにカスタムビューを使用していますが、それが関連しているかどうかは分かりませんが、この状況では別のものが使用されるはずです。ステータス項目のデフォルトテキストフィールド

ありがとうございました。

答えて

1

ステータス項目のメニューのdelegateとしてオブジェクトを設定し、‑menuWillOpen:デリゲートメソッドを実装し、‑performSelector:withObject:afterDelay:modes:を使用して最初のレスポンダを設定することができます。

これにより、メニューが開かれた後に、最初のレスポンダーをテキストループにする呼び出しが次回のイベントループ実行で確実に行われます。 メソッドは、メニューが閉じられるまでセレクタを呼び出さないので、modes:パラメータに渡された実行ループモードの配列内でNSRunLoopCommonModesまたはNSEventTrackingRunLoopModeを渡す必要があります。

- (void)menuWillOpen:(NSMenu *)menu 
{ 
    [self performSelector:@selector(highlightField) withObject:nil afterDelay:0.0 inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]]; 
} 

- (void)highlightField 
{ 
    [[yourTextField window] makeFirstResponder:yourTextField]; 
} 
+0

ステータス項目をクリックしたときに少なくとも実行するアクションがありますが、[[yourTextFieldウィンドウ] makeFirstResponder:yourTextField];うまくいかなかった。私はこのメソッドをテキストフィールドに5を入れて、何も起こっていないときにそれが動作していたかどうかを確認しましたが、私はそれを閉じて再び開いたときに5がそこにありました。 menuDidCloseのように動作しているようです。何が起こっているのかわからない... – Elbimio

+0

申し訳ありませんが、代わりに '-performSelector:withObject:delay:modes'メソッドを使用してください。 NSRunLoopCommonModes runloopモードでメソッド呼び出しをスケジュールする必要があります。私は答えを更新しました。 –

+0

ありがとう、それは素晴らしい仕事をした! – Elbimio

関連する問題