等待用户关闭窗口从NSTextField获取值
我正在Cocoa中用一个按钮和一个NSTextField开发GUI。 当点击按钮时,另一个窗口弹出一个NSTextField和两个按钮:确定按钮和取消按钮。 用户可以在第二个窗口的NSTextField中输入一些文本,当这个窗口关闭时,相同的文本将进入第一个窗口的NSTextField。
我的问题是:如何让我的应用程序等待用户关闭第二个窗口来更新第一个窗口的NSTextField? 如果用户在第二个窗口中单击取消按钮,我不想在第一个窗口中更改任何内容。
只能用模态窗口吗?
提前致谢,
Rhenan
一张简单的解决方案
在Interface Builder中,在与主窗口相同的.xib中创建一个新窗口,其大小比主窗口小。
Visible At Launch
取消选中Close
, Minimize
, Resize
和Visible 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中新建的窗口中
IBOutlet sheet
IBOutlet textField
IBAction dismissSheet
IBAction showSheet
上一篇: Wait for user close window to get values from NSTextField
下一篇: How to refresh NSTextField when its formatter changes its format?