2015-02-25 3 views
0

У меня есть приложение, и я хочу иметь отдельные окна. Каков наилучший способ загрузить их при запуске? Я думаю, что хочу, чтобы главное окно загрузило остальные. Вот что я получил сейчас, не работает.Несколько оконных контроллеров - swift

Я подклассифицировал контроллер главного окна и пытаюсь загрузить другое окно раскадровки. (Я могу держать его в главной раскадровке, если это необходимо).

class MainWindow: NSWindowController { 

    override init() { 
    super.init() 
    } 

    required init?(coder: NSCoder) { 
     super.init(coder: coder) 
     let sb = NSStoryboard(name: "SecondStoryboard", bundle: nil) 
     let win = sb?.instantiateControllerWithIdentifier("WindowTwo") as NSWindowController 
     win.showWindow(nil) 

    } 


} 

В конце концов, мне нужно иметь возможность передавать данные между контроллерами.

+0

Это не совсем ответ. Если вы предложите другой метод, приведите пример и подробно объясните, как это сделать. Я не совсем понимаю, что вы имеете в виду. Сделать это упорным? Что плохого в раскадровки? Я люблю их и как они работают с ограничениями. – JoeBayLD

ответ

1
import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 

    @IBOutlet weak var window: NSWindow! 
    @IBOutlet weak var preferencesPanel: NSPanel! 
    @IBOutlet weak var transparentCheck: NSButton! 

    var oldColor:NSColor? 
    func applicationDidFinishLaunching(aNotification: NSNotification) { 
     // Insert code here to initialize your application 
     oldColor = window.backgroundColor 
     window.level = screenSaverLevel 
     preferencesPanel.level = maximumWindowLevelKey 
    } 

    func applicationWillTerminate(aNotification: NSNotification) { 
     // Insert code here to tear down your application 
    } 
    @IBAction func transparentWindowAction(sender: AnyObject) { 

     window.opaque = transparentCheck.state == NSOffState 
     window.backgroundColor = transparentCheck.state == NSOffState ? oldColor : NSColor(calibratedHue: 0, saturation: 0, brightness: 0, alpha: 0.7) 
    } 


} 

enter image description here

enter image description here

enter image description here

windowsSampleProject

+0

Это все, что вам нужно без раскадровки –

+0

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

+0

Вы не хотите, чтобы настройки отображались при входе в систему. Просто снимите видимость с момента запуска –

0

Создать идентификатор для всего, что вы должны быть загружены с самого начала. Загрузите контроллеры, используя их идентификатор.

Этот код работает для меня. Он основан на этом сообщении: How does OS X load a storyboard based app, and how does it do window management?

lazy var preferenceWindowController: TYPEPreferenceWindowController? = 
    { 
     let theStoryboard :NSStoryboard? = NSStoryboard(name: "Main", bundle: nil) 
     var thePreferenceWindowController = theStoryboard?.instantiateControllerWithIdentifier("PreferenceWindowController") as TYPEPreferenceWindowController? 
     return thePreferenceWindowController 
    }() 



@IBAction func showPreferencePanel(sender: AnyObject) { 
     println("showPreferencePanel") 
     preferenceWindowController?.showWindow(self) 


    } 
Смежные вопросы