1

ナビゲーション コントローラーとコンテンツ コントローラーを表示するルート ビューがあります。これは次のようになります。 ここに画像の説明を入力

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 のデリゲートが LoginScreenViewController に設定され、ProjectTypeController のデリゲートを LoginScreenViewController に設定する insetad が設定されます。

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

4

1 に答える 1

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

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

このコードをより堅牢にするために、desitinationViewController が UINavigationController であるかどうかを確認することをお勧めします。

于 2012-04-20T15:05:01.027 に答える