2015-08-31 3 views
0

Я хочу показать/скрыть окно в swift, нажав кнопку в главном окне. В начало страницы отображается окно, но лист не закрывает окно. Мой AppDelegate код Дано:Показать/скрыть окно, нажав кнопку в Swift

import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 

    @IBOutlet weak var window: NSWindow! 


    func applicationDidFinishLaunching(aNotification: NSNotification) { 
     // Insert code here to initialize your application 
    } 

    func applicationWillTerminate(aNotification: NSNotification) { 
     // Insert code here to tear down your application 
    } 

    var settingsController: SettingsController? 

    @IBAction func inSettings(sender: NSObject?) 
    { 
     settingsController = SettingsController(windowNibName: "SettingsController") 
     window.beginSheet(settingsController!.window!, completionHandler: nil) 
    } 
    @IBAction func outSettings(sender: NSObject?) 
    { 
     window.endSheet(settingsController!.window!) 
    } 

} 

SettingsController:

import Cocoa 

class SettingsController: NSWindowController { 

    override func windowDidLoad() { 
     super.windowDidLoad() 

     // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. 
    } 
} 

ответ

0

Используйте endSheet до конца документа покадрово листа сессии. Как это:

@IBAction func outSettings(sender: NSObject?) 
{ 
    settingsController!.window!.endSheet(settingsController!.window!) 
} 

EDIT: Вы должны фактически закрыть окно в обработчике завершения вы звоните orderOut, как это:

@IBAction func inSettings(sender: NSObject?) 
{ 
    settingsController = SettingsController(windowNibName: "SettingsController") 
    window.beginSheet(settingsController!.window!) { 
     settingsController!.window!.orderOut(nil) 
    } 
} 
+0

endsheet не работает для меня – Devan

+0

@Devan «не работает», не помогает. Есть ли ошибка, если да, какой? Это просто ничего не делает? Пожалуйста, сообщите подробности. – Moritz

+0

Уточнено использование 'orderOut' ... – Aderstedt

0

Swift 3 Решение:

Допустим, что у вас есть WindowA и WindowB. Вы хотите открыть WindowB, но сначала вы хотите скрыть WindowA. Соедините окна с segue. (Выберите «Показать» как свойство «Вид»). Для сохранения скрытого окна вам нужен статический класс. в WindowA переопределить shouldPerformSegue и сохранить WindowA как статический объект NSWindow.

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 

     YourStaticClass.WindowA = self.view.window 
     self.view.window?.orderOut(self) 

     return true 
    } 

orderOut (self) скрывает окно. Затем откроется WindowB.

В контроллере представления WindowB используют функцию, чтобы закрыть windowB и показать скрытые WindowA:

@IBAction func btnBack_Click(_ sender: NSButton) { 

    YourStaticClass.WindowA?.makeKeyAndOrderFront(YourStaticClass.WindowA)  
    self.view.window?.close() 
} 
Смежные вопросы