2015-07-12 38 views
0

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

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

它只能用模态窗口吗?

由于提前,

Rhenan

回答

1

与纸张

  • 在界面生成器简单的解决方案创建在相同的.xib作为主窗口中的新窗口,它的大小小于主窗口。

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

  • 为1

  • 添加的NSTextField和两个NSButtons,设置OK按钮的tag在.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出口的NSTextField插座连接到IBOutlet sheet
  • 连接到IBOutlet textField
  • 都NSButtons的动作连接到IBAction dismissSheet
  • 连接UI元素的动作以显示表格IBAction showSheet
+0

我也建议在这种情况下工作表窗口。但是,如果您不想使用图纸窗口,则可以使用NSWindowWillClose委托属性。像这样的例子secondWindow.delegate = controller; //在你的控制器中 - (void)windowWillClose:(NSNotification *)notification {//在第一个窗口中更新你的文本框} –