web-dev-qa-db-ja.com

子View Controllerから親View Controllerのビューにアクセスするにはどうすればよいですか?

2D OpenGL ESビューの描画を処理するメインビューコントローラーと、起動時にロードして描画するボタンを決定する子ビューコントローラーbuttonManagerがあります。

ユーザーがこれらのボタンのいずれかを押すと、このView Controllerが作成され、そのビューが表示されるはずですが、ビューは追加されず、動作するようにテストされています。メインビューコントローラーからの私のコードは次のとおりです。

 buttonManager=[[ButtonManager alloc] init];
 [self addChildViewController:buttonManager];
 [self.view addSubview:buttonManager.view];

このビューを起動する私のコードは次のとおりです。

-(void)launchStopDialog: (NSString*)stopName {
    NSLog(@"stopdialog should be launched.");
    if (stopDialogController == nil)
        stopDialogController = [[StopDialogController alloc] initWithNibName:@"StopDialog" bundle:nil];
    if (stopDialogController)
        [stopDialogController presentWithSuperview:self.view.superview withStopName:stopName]; 
}
19
jfisk

親View Controllerにアクセスするには、self.parentViewControllerを使用できます。一度取得したら、そのviewプロパティを使用するだけでそのビューにアクセスできます

41
aqs

IOS 5.x +を使用している方への注意

self parentViewControllernilを返すようになりました。同じ結果を得るには、self presentingViewControllerを使用する必要があります。コードベースをアップグレードするための詳細と追加の回避策については、このブログ投稿を参照してください: http://omegadelta.net/2011/11/04/oh-my-god-they-killed-parentviewcontroller/

26
Jeremy C.

それは私のために働いたものです

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSString * segueName = segue.identifier;
    if ([segueName isEqualToString: @"child-view"]) {
        ChildViewController * childViewController = (ChildViewController *) [segue destinationViewController];
        [self addChildViewController:childViewController];

    }
}
3
nahlamortada

今、彼らが殺した後

self.parent

使用できます

override func didMove(toParentViewController parent: UIViewController?)
{        
}
3
Mohamed Hashem

Objective Cブロックアプローチを使用してこれを実現します。このブロックチュートリアルをご覧ください。 https://www.youtube.com/watch?v=FS4JAy1Wy3w

0