【问题标题】:Objective-C, Binding IBAction to NSTextFieldObjective-C,将 IBAction 绑定到 NSTextField
【发布时间】:2012-09-09 06:29:13
【问题描述】:

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

【问题讨论】:

  • @NULL,如果是用于 iOS 则可能 - 这是用于 Mac OS X (Cocoa);谢谢
  • 您希望从somethingVoid 调用doSomething:?就叫吧。这是一种和其他方法一样的方法。
  • @JoshCaswell,它似乎没有任何效果——当像 [self doSomething:nsview]; 这样使用时有什么想法吗?
  • 请发布您的实际代码而不是编造示例,并说明您真正想要完成的工作。

标签: objective-c cocoa binding


【解决方案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) { [自我关闭窗口]; }

【讨论】:

  • 当我从你的清单中向下移动时,一切都会被调用。当我从 NSButton 访问 switchWindow 时,它从 window1 更改为 window2 没有任何问题;我在这里不知所措。
  • 也许如果我尝试类似于:stackoverflow.com/questions/4028734/… 它可能会工作?虽然该方法适用于 iOS,但我不确定如何为 Cocoa 实现它;只是一个想法。
  • 最佳猜测:单击按钮时发生的部分情况是包含该按钮的窗口成为关键窗口;无论出于何种原因,当您调用-textUpdated 时,该窗口不是关键窗口。除此之外,没有足够的信息继续下去。请记住,不涉及魔法:每个错误背后都有一个原因,而您的工作就是找到那个原因。
  • 谢谢,我会继续寻找可能的原因;我应该将您的答案标记为正确吗?我不确定是否有人会回应任何可能阐明这一点的事情。另外,在一个不相关的说明中:为什么当我提出问题时我会被否决,这不是这个网站的用途吗?似乎它真的违背了目的。事实上,这令人沮丧。我不会无缘无故地问这个问题,如果不值得你花时间,你可能不会花时间回答。
  • 不要将答案标记为解决方案,除非它解决了您的问题(但请随意投票任何有帮助的答案)。人们出于以下几个原因投票否决问题:太模糊,OP 显然没有努力寻找答案,离题等。不要让一些反对票让你灰心——试着写出包含所有相关细节的问题.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多