Несколько оконных контроллеров - 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)

    }


}

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


person JoeBayLD    schedule 25.02.2015    source источник
comment
Это не совсем ответ. Если вы предлагаете другой способ, приведите пример и подробно объясните, как это сделать. Я не совсем понимаю, что вы имеете в виду. Сделать его постоянным? Что плохого в раскадровке? Мне нравятся они и то, как они работают с ограничениями.   -  person JoeBayLD    schedule 26.02.2015


Ответы (2)


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)
    }


}

введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения

windowsSampleProject

person Leo Dabus    schedule 26.02.2015
comment
Это все, что вам нужно без раскадровки - person Leo Dabus; 26.02.2015
comment
Я уже подключил окно панели настроек к своему меню приложения, и с помощью этого выхода я управляю им вместе со всеми другими окнами, которые могут мне понадобиться. - person Leo Dabus; 26.02.2015
comment
Вы не хотите, чтобы настройки отображались при входе в систему. Просто отмените выбор видимого при запуске - person Leo Dabus; 26.02.2015
comment
После просмотра этого мне нужно использовать раскадровку. Я уже построил его, и лично я не фанат xibs. Мне нужно знать способ отображения нескольких раскадровок в Xcode. - person JoeBayLD; 03.03.2015

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

Этот код работает для меня. Он основан на этом сообщении: Как OS X загружает приложение на основе раскадровки и как оно управляет окнами?

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)


    }
person userInStackoverflow    schedule 19.03.2015