0

次のコードで、View Controllerにカスタムビューを追加しています

[bTVC addSubview:customView];

今、私はこのようなカスタムビューのクラスで親viewControllerのインスタンスメソッドを呼び出したい

[self.parentViewController instanceMethod];

それは可能ですか?どうやってやるの ?

4

2 に答える 2

4

「通常の」メソッドは、親のviewControllerを指すプロパティ(保持されない)デリゲートを実装する必要がありますが、次のようなものを使用することをお勧めします。

-(MyCustomUIViewController*)findParentUIViewControllerInSuperViews:(UIView*)myView {
    for (UIView* next = [myView superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[MyCustomUIViewController class]]) {
            return (MyCustomUIViewController*)nextResponder;
        }
    }
    return nil;
}

今すぐ電話してください:

MyCustomUIViewController* myParentViewController = (MyCustomUIViewController*)[self findParentUIViewControllerInSuperViews:self];
[myParentViewController instanceMethod];

とにかく、デリゲートがどのように機能するかを学ぶこともお勧めします。多くの場合に役立ち、遅かれ早かれ必ず必要になります...

于 2013-01-29T09:53:51.373 に答える
0

NSViewControllerにはaddSubviewメソッドはありません。NSViewで見つけることができます。bTVCがNSView(またはのサブクラス)のインスタンスである場合、superviewをselfに送信することで親ビューと呼ばれるものを取得できます:[selfsuperview]またはself.superview。例ではbTVCが返されます。NSViewControllerの動作は異なります。ここで、完全なドキュメントを読むことができます

于 2013-01-29T09:28:05.503 に答える