1

私は、これは、それがどのように見えるかで、コンテンツコントローラとナビゲーションコントローラを提示ルートビューを持っている: enter image description hereiPhoneがストーリーボードのナビゲーションビューコントローラーを表示したり解除したりしますか?

NavigationControllerはモーダル提示、およびProjectTypeSelectionViewは彼のルートコントローラです。ログアウトボタンをタップすると、モーダルビューが閉じられ、LoginScreenViewControllerに戻ります。

だから私は、デリゲートとしてprepareSegue LoginScreenに設定:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

UINavigationController *destination = segue.destinationViewController; 

if ([[destination ] respondsToSelector:@selector(setDelegate:)]) { 
    NSLog(@"%@", destination); 
    [destination setValue:self forKey:@"delegate"]; 
} 
} 

、その後ProjectTypeViewController内でこのメソッドを追加します。

ログアウトボタンをタップしたときに呼び出され
- (IBAction)logout:(id)sender { 
     [self.delegate projectTypeSelectionViewControllerDidFinish]; 
} 

。私の驚いたことに、これはコントローラを却下しません。あなたはすべてがつながっていても何も起こりません。

prepareSegueが呼び出されたときにNavigationControllerのdelagateがLoginScreenViewControllerに設定されているとき、ProjectTypeControllerの代理人をLoginScreenViewControllerに設定することを忘れてしまいました。

これを正しく解決するにはどうすればよいですか?

答えて

7
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

UINavigationController *destination = segue.destinationViewController; 
UIViewController *vc = [[destination viewControllers] objectAtIndex:0]; 
vc.delegate = self; 
} 

desitinationViewControllerはUINavigationController

であるかどうかをチェックしたい場合があります。このコードをより堅牢にするには
関連する問題