1

別のView Controllerを作成し、そのビューをサブビューとして追加するUIViewControllerがあります。

親 UIViewController で:

SlateMoreView* subView = [[SlateMoreView alloc] initWithNibName:@"SlateMoreView" bundle:nil];
[self.view addSubview:subView.view];

次に、親ビューでサブビューからメソッドを呼び出す必要があります。

この種のコードを使用して親を見つけることができるため、[self.navigationController pushViewController: subView animation: YES] を使用してサブ UIViewController を追加するときにこれを行う方法を見てきました。

サブビュー UIViewController で:

NSArray* viewControllerArray = [self.navigationController viewControllers]
int parentViewControllerIndex = [viewControllerArray count] - 2;
SlateView* slateView = [viewControllerArray objectAtIndex:parentViewControllerIndex];

...そして、メッセージを送信できます。しかし、addSubView を使用して手動でサブビューを追加したため、これを行うことはできません。

親の UIViewController と会話する方法を考えられる人はいますか?

ありがとう!

4

3 に答える 3

1

UIViewsuperviewあなたが探していると思われるプロパティがあります。

UIViewControllerさらに、非常に意図的にカスタムの包含ビュー コントローラーを作成しない限り、そのように のビューをネストしたくないでしょう。http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/を参照してください。

于 2011-05-14T16:54:15.560 に答える
0

ビューをサブビューとしてビュー階層に追加すると、レスポンダー チェーンに配置されます。レスポンダー チェーンを上って、 a によって制御される として View Controller に到達することがUIViewできます。UIViewControllerUIViewControllernextResponder

id object = theSubview;
do {
    object = [object nextResponder];
} while ( ![object isMemberOfClass:[YourViewController class]] );

// object has the view controller you need.
于 2011-05-14T18:32:22.147 に答える
0

NSNotifications を使用して問題を解決できるかどうかを検討してください。関心のあるリスナー (スーパービュー) が知る必要があるイベントが発生したときに、サブビューから通知を投稿できます。スーパービューが通知を受け取ると、任意のコードを実行できます。その間、サブビューはスーパービューについて知る必要はありません。

これは、クラス同士の依存を少なくする 1 つの方法です。

別のオプションとして委任を使用することもできます。

于 2011-05-14T17:08:49.503 に答える