-1

結果の結果に基づいて自分自身を再設定するNSTextFieldがあります。IBAction(通常はアプリのNSButtonをクリックして制御されます)を自動的に実行したいと思います。クリック、または結果に基づいてIBActionを自動的に実行するにはどうすればよいですか?

appDelegate.h

@interface main : NSView <NSApplicationDelegate>
{
NSView *main;
IBOutlet NSTextField *textValue;
IBOutlet NSWindow* window1;
IBOutlet NSWindow* window2;
}
- (void)textUpdated;
- (IBAction)switchWindow:(id)sender;

(IBAction)switchWindowをトリガーまたはバインドしたいもの:

appDelegate.m

- (void)textUpdated
{
[textValue setStringValue:[NSString stringWithFormat:@"%@, Switching Window", stringValue]];
[self switchWindow:sender];
}

- (IBAction)switchWindow:(id)sender {
    [self performSelector:[NSApp keyWindow]==window?@selector(openWindow):@selector(closeWindow) withObject:nil afterDelay:0.0];
}

- (void)openWindow {
    [window1 showWindow:window2 open:YES];
}

- (void)closeWindow {
    [window2 showWindow:window1 open:NO];
}
4

1 に答える 1

1

実際のコードに切り替えると質問は改善されますが、質問の内容を正確に理解することは依然として困難です。Josh Caswell が指摘したように、アクションは単なるメソッドであり、自分で自由に呼び出すことができます。あなたはすでに でそれを行っているようですが-textUpdated、「まだ何もしていない」というあなたの主張は、私たちに先に進むことをあまり与えません. そう:

  • -textUpdated呼ばれますか?いいえの場合は、問題があります。

  • -switchWindow:呼ばれますか?そのメソッドにブレークポイントを設定し、そこで停止するかどうかを確認します。(ヒント: 最初の質問に「はい」と答えた場合は、そこで終了します。)

  • 起こっていないことは何だと思いますか?

  • さまざまな変数 (ivar およびローカル変数) の値は期待どおりですか?

  • -openWindow適切に-closeWindow呼び出されますか?

  • 何を[NSApp keyWindow]返しますか?に相当するポインターを返すことはありますwindow? window(ちなみに、ここで何を意味するかを教えても問題ありません。)

  • おそらく次のようなものを書くつもりでしたか (「window」の後の「1」に注意してください):

    [self performSelector:[NSApp keyWindow] == window1 ? @selector(openWindow) : @selector(closeWindow) withObject:nil afterDelay:0.0];

  • 一度に 1 つのことだけを行うと、コードが理解しやすくなる場合があります。はい、それはより多くの行ですが、デバッグがはるかに簡単です:

    NSWindow *keyWindow = [NSApp keyWindow];
    if (keyWindow == window1) {
        [自己openWindow];
    }
    そうでなければ (keyWindow == window2) {
        [self closeWindow];
    }
    
于 2012-09-17T05:28:00.443 に答える