次のコードで、View Controllerにカスタムビューを追加しています
[bTVC addSubview:customView];
今、私はこのようなカスタムビューのクラスで親viewControllerのインスタンスメソッドを呼び出したい
[self.parentViewController instanceMethod];
それは可能ですか?どうやってやるの ?
次のコードで、View Controllerにカスタムビューを追加しています
[bTVC addSubview:customView];
今、私はこのようなカスタムビューのクラスで親viewControllerのインスタンスメソッドを呼び出したい
[self.parentViewController instanceMethod];
それは可能ですか?どうやってやるの ?
「通常の」メソッドは、親の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];
とにかく、デリゲートがどのように機能するかを学ぶこともお勧めします。多くの場合に役立ち、遅かれ早かれ必ず必要になります...
NSViewControllerにはaddSubviewメソッドはありません。NSViewで見つけることができます。bTVCがNSView(またはのサブクラス)のインスタンスである場合、superviewをselfに送信することで親ビューと呼ばれるものを取得できます:[selfsuperview]またはself.superview。例ではbTVCが返されます。NSViewControllerの動作は異なります。ここで、完全なドキュメントを読むことができます