-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:会被调用吗?在该方法中设置一个断点,看看是否停在那里。(提示:如果您对第一个问题的回答是“是”,您将停在那里。)

  • 你期望发生什么没有发生的事情?

  • 各种变量(ivars 和局部变量)的值是您所期望的吗?

  • -openWindow-closeWindow得到适当的调用?

  • 返回什么[NSApp keyWindow]?它是否曾经返回一个等同于 的指针window?(顺便说一句,告诉我们这里是什么window意思也没什么坏处。)

  • 您是否打算写类似的东西(注意“窗口”后面的“1”):

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

  • 如果您一次只做一件事,您的代码可能更容易理解。是的,它的行数更多,但调试起来要容易得多:

    NSWindow *keyWindow = [NSApp keyWindow];
    if (keyWindow == window1) {
        [自开窗口];
    }
    否则 if (keyWindow == window2) {
        [自我关闭窗口];
    }
    
于 2012-09-17T05:28:00.443 回答