FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


macOSのContainer Viewのcontrollerの参照を得たい

プロジェクトに一番基本になるViewControllerクラスがあるとする。
storyboardでそのViewControllerのviewの上にLabelなりButtonなり置いていく、、、というのはよくあると思うのだが、NSViewオブジェクトとそれを管理するview controllerも置きたい時がある。

storyboardを使う場合だとLibraryからContainer Viewを追加することになる。

LibraryでContainer Viewを選んでいるところ

↑Container Viewを選んでドラッグ&ドロップ。

storyboardでContainer Viewを設置したところ

↑ViewControllerのviewに’Container View’と表示され新たなView Controllerとそのviewが表示される。

ここで追加された方のView ControllerクラスをSubViewControllerクラス(NSViewControllerのサブクラス)としてファイルを作成し、、、

Custom Classの設定画面

↑連携する。storyboardで新しいView Controllerを選択し、Custom ClassってところでSubViewControllerを選ぶ。ファイル作成後なら選択肢があるはず。

ここで実行するとSubViewControllerのviewDidLoadメソッドがコールされているのでちゃんと連携していることが確認できる。


で、ここからが本題。


ViewControllerクラスのファイル内でSubViewControllerクラスの参照を得たいのだが、その方法がわからない。
SubViewControllerのReferencing OutletをView Controllerに接続ってできないし、、、?
もしいい方法があれば教えて下さい、、、

現状では苦し紛れに下のようにして得ているが、、、ださい。いや、なんか他に方法あるやろ?と突っ込みたくなる。

Restoration IDの指定画面

↑SubViewControllerで連携したのに加えRestoration IDに適当な文字列を指定しておく。
{
    SubViewController *subViewController;//インスタンス

    subViewController = nil;
    for (NSViewController *vc in self.childViewControllers) {
        //NSLog(@"vc.identifier=%@ %@",vc.identifier,[vc className]);
        if ([vc.identifier isEqualToString:@"id_subViewController"]) {
            subViewController = (SubViewController *)vc;
        }
    }
    NSAssert(subViewController, @"subViewController is nil!");
}
↑さっき指定した文字列をたよりにself.childViewControllersから探すという力技。
うーん、、、🤔


また、接続する準備時にコールされるメソッド
- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender;
に記述する方法でもできなくもない。
- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"segue.destinationController = %@",segue.destinationController);
    NSViewController *vc = (NSViewController *)segue.destinationController;
    NSLog(@"vc.identifier=%@ %@",vc.identifier,[vc className]);
}
↑ここでsegue.destinationControllerが取得できる(id型なのでキャストしてる)ので先ほどと同じようにRestoration IDに指定した文字列と一致するか調べれば得ることができるが、うーん、、、🤔

<< Kerasに自作データセット(画像)を与えてみる  TopPage  Mojaveにアプデしたらbone入りのdaeファイルが正しく表示されない >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1229-593143f3




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad