1

基本的に「設定」ビューであるモーダル フォーム シートを表示する iPad ビューがあります。そこから、ユーザーは特定の設定に移動できます。モーダル ビューが閉じられたときに、iPad のメイン ビューを更新できるようにする必要があります。

-(void)refreshTableしたがって、モーダル ビューが閉じられたときに呼び出すデリゲート プロトコルが必要です。モーダル ビューを提示する場合を除いて、これは問題にはなりません。割り当てが必要なデリゲートは、提示されたビューから「プッシュ」されるビューです。(スクリーンショット)

ここに画像の説明を入力

モーダル フォーム シートの表示方法は次のとおりです。他のビューをプッシュする必要があるため、UINavigationController にカプセル化しています。
(ここでデリゲートを割り当てるだけですが、プロトコルを持つビューは AddView からプッシュされます)NewAftpViewControllerは、プロトコルを持つビュー コントローラーです。

-(void)presentAddView:(id)sender {

    AddView *avc = [self.storyboard instantiateViewControllerWithIdentifier:@"add"];
    UINavigationController *navcont = [[UINavigationController alloc] initWithRootViewController:avc];
    navcont.modalPresentationStyle = UIModalPresentationFormSheet;
    [self presentViewController:navcont animated:YES completion:NULL];
}

そして、プッシュされたビューでの私のプロトコルは次のとおりです。

@protocol RefreshAfterAddingNewAftpDelegate
-(void)refreshTable;
@end

@interface NewAftpViewController : UIViewController

@property (nonatomic, retain) id <RefreshAfterAddingNewAftpDelegate> refreshAfterAddingNewAftpDelegate;

@end
4

2 に答える 2

2

これを行うには2つの方法があります。投稿に残っているほとんどのコントローラーへの参照を取得できるはずです。どのクラスにでも[self.navigationController presentingViewController]キャストする必要があります。self.navigationController次に、で NewAftpViewController、次のようにデリゲートを設定できます。

self.delegate = [(cast here)self.navigationController presentingViewController];

しかし、これはデリゲートを使用する目的を損なうようです。デリゲーターはデリゲートがどのクラスであるかを知っているはずではありませんが、ここでは明示的に設定する必要があります。デリゲートを使用する代わりに、そのコントローラーのメソッドを直接呼び出すことができます。

このような状況では、を使用するのがより良い方法だと思いますNSNotification。それは私にはよりクリーンでシンプルに思えます。からの通知を投稿しNewAftpViewControllerて、最初のコントローラーにリッスンさせます。

于 2012-12-16T19:08:52.863 に答える
1

次の View Controller をプッシュするprepareForSeagueメソッドでは、デリゲートを設定できます。

CustomController *controllerToPush = segue.destinationViewController;
controllerToPush.delegate = self.navigationController.parentViewController;

お役に立てれば!

于 2012-12-16T19:55:38.633 に答える