2015-07-12 41 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 {//在第一個窗口中更新你的文本框} –