等待用户关闭窗口从NSTextField获取值

我正在Cocoa中用一个按钮和一个NSTextField开发GUI。 当点击按钮时,另一个窗口弹出一个NSTextField和两个按钮:确定按钮和取消按钮。 用户可以在第二个窗口的NSTextField中输入一些文本,当这个窗口关闭时,相同的文本将进入第一个窗口的NSTextField。

我的问题是:如何让我的应用程序等待用户关闭第二个窗口来更新第一个窗口的NSTextField? 如果用户在第二个窗口中单击取消按钮,我不想在第一个窗口中更改任何内容。

只能用模态窗口吗?

提前致谢,

Rhenan


一张简单的解决方案

  • 在Interface Builder中,在与主窗口相同的.xib中创建一个新窗口,其大小比主窗口小。

  • Visible At Launch取消选中CloseMinimizeResizeVisible At Launch 。 确保Title Bar被选中(否则将打破第一响应者)。

  • 添加一个NSTextField和两个NSButtons,将OK按钮的tag设置为1。

  • 在.h文件中添加

    @property (weak) IBOutlet NSTextField *textField;
    @property (weak) IBOutlet NSWindow *sheet;
    
  • 在.m文件中添加

    - (IBAction)showSheet:(id )sender
    {
      [self.window beginSheet:self.sheet completionHandler:^(NSModalResponse returnCode) {
        if (returnCode == NSModalResponseOK) {
           self.mainTextField.stringValue = self.textField.stringValue;
        }
      }];
    }
    
    - (IBAction)dismissSheet:(NSButton *)button
    {
       [self.textField.window makeFirstResponder:nil]; // force end editing
       [self.window endSheet:self.sheet returnCode:button.tag];
    }
    
  • mainTextField是主窗口中的NSTextField实例

    在Interface Builder中新建的窗口中

  • 将NSWindow插座连接到IBOutlet sheet
  • 将NSTextField插座连接到IBOutlet textField
  • 将两个NSButtons的动作连接到IBAction dismissSheet
  • 连接UI元素的操作以将工作表显示到IBAction showSheet
  • 链接地址: http://www.djcxy.com/p/85251.html

    上一篇: Wait for user close window to get values from NSTextField

    下一篇: How to refresh NSTextField when its formatter changes its format?