web-dev-qa-db-ja.com

ココア:Swiftのビューコントローラー内からウィンドウタイトルを設定する方法

ストーリーボードとXcode 6のSwiftを使用するCocoaアプリで構築しようとしましたが、NSViewController内からウィンドウのタイトルを変更しようとすると、次のようになります。コードが機能しません。

_self.title = "changed label"
_

上記のコードをviewDidLoad()関数で記述した場合、結果のアプリのタイトルはwindowのままです。

また、View Controllerにはwindowなどのプロパティがないため、次のコードではエラーが発生します。

_self.window.title = "changed label"
_

では、ストーリーボード上に構築されたCocoaアプリでプログラムによってウィンドウのタイトルを変更するにはどうすればよいですか?

19
Blaszard

コードには2つの問題があります。

  • viewDidLoadが呼び出されますbeforeビューがウィンドウに追加されます
  • NSViewControllerにはウィンドウプロパティがありません

最初のものを修正するには、viewDidAppear()をオーバーライドします。このメソッドはafterと呼ばれ、ビューは画面に完全に移行しました。その時点ですでにウィンドウに追加されています。
ウィンドウタイトルへの参照を取得するには、ビューを介してビューコントローラーのウィンドウにアクセスできます:self.view.window.title

以下をビューコントローラサブクラスに追加するだけで、ウィンドウのタイトルが変更されます。

override func viewDidAppear() {
    super.viewDidAppear()
    self.view.window?.title = "changed label"
}
52

これは私にとってはうまくいきました、currentDictは前のviewControllerから渡されたNSDictionaryです

var currentDict:NSDictionary?

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    if let myString:String = currentDict?["title"] as? String {
        self.title = myString
    }

}
0
Mike Zriel