CoCoa 模態視窗

摘要:CoCoa 模態視窗

新手發文,如有謬誤,歡迎指正.😁

(註 : 一個轉向Mac 開發的.net 開發人員)

模態視窗:只能切換至其他應用程式視窗,並不能與本身應用程式視窗切換,開啟的話會鎖定應用程式,直到關閉後才解除鎖定。

非模態視窗:是一個獨立運行的視窗,允許其他應用程式視窗和自身應用程式視窗切換不影響自身應用程式的操作。

我們先來看看在.net上 模態視窗和非模態視窗的使用

Windows : 

  • 模態視窗
MainWindow mainWin = new MainWindow();
mainWin.Show();
  • 非模態視窗
MainWindow mainWin = new MainWindow();
mainWin.ShowDialog();
 

那麽在Mac cocoa 上要怎麽實現呢?

Mac CoCoa : 

  • 非模態視窗
WindowController *windowcontroller = [[WindowController alloc]initWithWindowNibName:@"WindowController"];
[windowcontroller showWindow:nil];

//為了防止這個視窗在程式碼塊執行完成後被自動釋放 我們需要將他存取到一個數組中.
//首先我們需要在@interface 中預設一個property

@property (nonatomic, strong) NSMutableArray *controllers;

// ㄟ 那麽完善上面的程式碼之後是這樣子

if(!controllers){
       self.controllers  = [[NSMutableArray alloc]init];
}

WindowController *windowcontroller = [[WindowController alloc]initWithWindowNibName:@"WindowController"];
[self.controllers addObject:windowcontroller];
[windowcontroller showWindow:nil];

//OK Running
  • 模態視窗
模態視窗需要做兩個操作:

//實作一個Controller並 RunModalforWindow

WindowController *windowcontroller = [[WindowController alloc]initWithWindowNibName:@"WindowController"];
//將視窗置頂到自身程式
[[windowcontroller window] setLevel: kCGStatusWindowLevel];
//Run
NSApp runModalForWindow: windowcontroller.window];

//當需要關閉該程式視窗 我們需要在WindowController中設定一個funtion
//這個funtion 在WindowController關閉視窗時 執行下面程式碼

 [NSApp stopModal];


OK, 本次教學到此結束