0

ポップオーバービューのプッシュされたビュー(ナビゲーションコントローラーに埋め込まれている)から、メインビューコントローラー('showDetails:')のデリゲートメソッドを呼び出す必要があります。これはすべてストーリーボードの設定によるものです。

階層は次のとおりです。メインビュー->ポップオーバー(ナビゲーションコントローラーに埋め込まれたメニューテーブルビュー)->ポップオーバーセカンダリビュー(ポップオーバーナビゲーションコントローラーにプッシュ)

私はprepareForSegueを使用してポップオーバーにデリゲートを設定する方法を知っていますが、内部ビューではありません。ポップオーバーの内側(プッシュ)ビューからメインビューのデリゲートメソッドを呼び出すにはどうすればよいですか?

ポップオーバーのメインビューでデリゲートを設定する方法は次のとおりです。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {    
    if ([segue.identifier isEqualToString:@"segueSearchResults"]) {
        //Dismiss User Popover
        [self dismissUserPopover];

        SearchResultsViewController *vc = segue.destinationViewController;
        vc.searchDelegate = self;
        self.searchPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
        self.searchPopover.delegate = self;

    }
}
4

2 に答える 2

0

VC階層で遠く離れている2つのViewController間で通信する必要がある場合、一方を他方から参照して、メソッドを直接呼び出すことができるようにしようとすると、あまりうまく機能しません。その間には、いくつかのレベルの間接参照があります。後でVC階層を変更すると、非常に壊れやすくなります。

代わりに通知(NSNotificationCenter)を調べてください。アプリ内のどこにあるかに関係なく、あるVCの「ブロードキャスト」情報を別のVCの「ブロードキャスト」情報に応答させることができます。

于 2013-03-24T05:06:18.257 に答える
0

代わりに、私はあなたの場合は「NSNotificationCenter」を好みます

uiviewでのアクションのために、ViewControllerにオブザーバーを追加します

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(receiveActionNotification:)
                                         name:@"someActionNotification"
                                       object:nil];

PopOverControllerでプッシュされたビューからの通知の投稿Viewcontrollerの通知とメソッドの投稿が呼び出されます

[[NSNotificationCenter defaultCenter] postNotificationName:@"someActionNotification" object:self];

最後にオブザーバーを削除することを忘れないでください。

[[NSNotificationCenter defaultCenter] removeObserver:@"someActionNotification"];
于 2013-03-24T06:35:52.037 に答える