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