2015-01-14 14 views
9

Điều tốt nhất tôi đã có thể hình dung ra là:làm thế nào để xử lý applicationShouldHandleReopen trong một ứng dụng Storyboard phi Document dựa

func applicationShouldHandleReopen(sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 

    if !flag{ 
     let sb = NSStoryboard(name: "Main", bundle: nil) 
     let controller = sb?.instantiateInitialController() as NSWindowController 

     controller.window?.makeKeyAndOrderFront(self) 
     self.window = controller.window 
    } 

    return true 
} 

Nhưng điều đó đòi hỏi tôi đặt một ref để các cửa sổ trên đại biểu ứng dụng của tôi. Vì đó là không cần thiết khi ứng dụng ban đầu bắt đầu tôi khá tích cực Tôi đang làm điều gì đó sai trái trong khi thiếu một cái gì đó hiển nhiên.

Giải pháp này cũng xuất hiện để làm việc

func applicationShouldHandleReopen(sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 

    if !flag{ 

     for window in sender.windows{ 
      if let w = window as? NSWindow{ 
       w.makeKeyAndOrderFront(self) 
      } 
     } 
    } 

    return true 
} 

Dưới đây là một giải pháp thứ 3 mà tôi cũng đã tìm thấy tác phẩm, từ bên trong NSApplicationDelegate của bạn:

var mainWindow: NSWindow! 

func applicationDidFinishLaunching(aNotification: NSNotification) { 
    mainWindow = NSApplication.sharedApplication().windows[0] as! NSWindow 
} 

func applicationShouldHandleReopen(sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 
    if !flag{ 
     mainWindow.makeKeyAndOrderFront(nil) 
    } 

    return true 
} 

Tôi không có ý tưởng tại sao Apple không cung cấp hướng dẫn về điều này hoặc cho phép bạn đặt lối thoát từ bảng phân cảnh cho cửa sổ. Nó có vẻ giống như một điều phổ biến cần. Có lẽ tôi vẫn còn thiếu cái gì đó.

Trả lời

5

Trong trường hợp bạn đang tìm kiếm giải pháp dựa trên cacao cho các ứng dụng không phải tài liệu. Đây là tương đương với giải pháp thứ hai của Adam.

- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag 
{ 
    if(!flag) 
    { 
     for(id const window in theApplication.windows) 
     { 
      [window makeKeyAndOrderFront:self]; 
     } 
    } 
    return YES; 
} 
2

Swift 3: Trong AppDelegate.swift thêm một biến kiểu NSWindow

lazy var windows = NSWindow() 

và thực hiện applicationShouldHandleReopen:

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 
    if !flag { 
     for window in sender.windows { 
      window.makeKeyAndOrderFront(self) 
     } 
    } 

    return true 
} 
Các vấn đề liên quan