Objective-C,将IBAction绑定到NSTextField

时间:2012-09-17 02:29:18

标签: objective-c cocoa binding

我有一个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];
}

1 个答案:

答案 0 :(得分:1)

切换到真实代码可以改善这个问题,但仍然很难准确理解你所要求的内容。正如约什卡斯韦尔指出的那样,一个动作只是一种方法,你可以自由地调用它。你好像已经在-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) {
        [self openWindow];
    }
    else if (keyWindow == window2) {
        [self closeWindow];
    }
    
相关问题