2014-09-15 2 views
1

Я работаю над приложением OS X и новичок в разработке Swift и OS X. У меня есть окно, в котором я хочу быть модальным, и время от времени будет отображаться много контента, поэтому я хочу разрешить ему войти в режим FullScreen. После этого окно и код ниже выполняют это, но выход из режима FullScreen заставляет окно исчезать. Если я перейду на другой рабочий стол и вернусь, окно вернется. Ниже представлен код делегата моего приложения.Модальный NSWindow исчезает после выхода FullScreen

import Cocoa 

class AppDelegate: NSObject, NSApplicationDelegate { 
    let theApp: NSApplication = NSApplication.sharedApplication() 
    var fooController: FooController? 

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

    @IBAction func sessionFoo(sender: AnyObject) { 
     if fooController == nil { 
      fooController = FooController(windowNibName: "FooWindow") 
     } 

     // This works when it returns from FullScreen but isn't modal 
     // fooController!.showWindow(self) 

     // This is modal but the window disappears when returning from FullScreen 
     theApp.runModalForWindow(fooController!.window) 
    } 
} 

В инспекторе Атрибуты для окна: проверяются следующие:

Shadow 
    Close 
    Resize 
    Restorable 
    Deferred (for Memory) 


Все «Прогнозные Поведение»
Полный Экран «Основное окно», я пытался " Вспомогательное окно "без везения.
Память "Буферирована".

Это дополнительное окно для приложения на основе документа. Что мне не хватает? Благодарю.

+0

Я полагаю, это потому, что создание окна в полноэкранном режиме завершает модальное окно. –

+0

Нет, модальное окно не заканчивается. В полноэкранном режиме модальное окно присутствует и ведет себя по желанию. Выход из полноэкранного режима приводит к тому, что модальное окно перестает быть видимым, но основное окно все равно не может принимать вход так же, как при наличии модального окна. После переключения на другой рабочий стол OS X и обратно модальное окно снова появляется и по-прежнему имеет модальное поведение. – user2129643

ответ

0

1.overrides NSWindowDelegate.windowDidExitFullScreen;

2.set NSWindow.Delegate;

3.call NSWindow.makeKeyAndOrderFront или NSWindow.OrderFront в окнеDidExitFullScreen;

public class tbWindowDelegate : NSWindowDelegate 
{ 
    public EventHandler WindowFullScreenDidExit; 

    public override void DidExitFullScreen(NSNotification notification) 
    { 
     if (WindowFullScreenDidExit != null) 
      WindowFullScreenDidExit(notification, EventArgs.Empty); 
    } 
} 


public class tbWindow : NSWindow 
{  
    protected bool mRunModal = false; 
    protected tbWindowDelegate mDelegate = null; 

    public tbWindow() : base() 
    { 
     this.InitEvent(); 
    } 

    private void InitEvent() 
    {   
     this.mDelegate = new tbWindowDelegate(); 
     this.mDelegate.WindowFullScreenDidExit = this.OnWindowFullScreenDidExit; 
     this.Delegate = this.mDelegate; 
    } 


    protected virtual void OnWindowFullScreenDidExit(object sender, EventArgs e) 
    { 
     if (this.mRunModal) 
     { 
      //this.MakeKeyAndOrderFront(this); 
      this.OrderFront(this); 
     } 

    } 

}