2011-12-20 12 views
10

私は2つのセグを持つアプリケーションを持っています。いずれかのセグで、現在のビューコントローラはデリゲートになり、もう一方はデリゲートになりません。prepareForSegueとデリゲート

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"MoreOptions"]) { 
     UINavigationController *navigationController = segue.destinationViewController; 
     MoreOptionsViewController *controller = (MoreOptionsViewController *)navigationController.topViewController; 
     controller.delegate = self; 
    } else if ([segue.identifier isEqualToString:@"FullStoryView"]) { 
     SingleStoryViewController *detailViewController = segue.destinationViewController; 
     detailViewController.urlObject = sender; 
    } 
} 

これはすべて問題なく動作しますが、コードをよく理解してください。私が理解できないことは、2番目のif条件のように、単純にsegue.destinationViewControllerから取得するのではなく、navigationController.topViewControllerからMoreOptionsViewControllerへの参照を取得する必要があることです。私は現在のビューコントローラ(自己)をデリゲートとして設定しているのですか?繰り返しますが、私は問題を解決しようとせず、何が起こっているのかをよりよく理解しようとしています。

答えて

11

あなたのストーリーボードを見てください。なぜこれが当てはまるのでしょうか。 UINavigationControllerMoreOptionsViewControllerを埋め込み、ナビゲーションコントローラにセグを接続して、destinationViewControllerとしています。これはかなり一般的です。

+0

ああ、時には答えがプレーンサイトにあるのではないですか?ありがとう。 –

4

代理人は、あなたの質問の文脈ではほとんど無関係です。

あなたの最初のセグエの宛先は、あなたが本当にで興味をしているビューコントローラが含まれているナビゲーションコントローラ、である。したがって、そのビューを取得するために、あなたはそれがどんな性質を持っていないので、ナビゲーションコントローラを通過する必要があります設定に興味があります。

2つ目のSegueは、1つのView Controllerに直接アクセスできるため、直接アクセスすることができます。

関連する問題