1

私はしばらくこの問題に悩まされてきましたが、これを行う方法に関する有用な情報が見つかりません..

テーブルビューでアイテムを選択できるベースビュー (ビュー 1) があります。アイテムの「ページ」(ビュー 2) で、モーダルビュー (ビュー 3) をトリガーして、そのアイテムを編集することを選択できます。このモーダルビューでは、このアイテムを削除するオプションがあります。ユーザーがそのボタンを押してアイテムを削除することを確認した場合、アプリをビュー 1 に送り返したい..

popToViewControllerさまざまなこと ( 、など)を試しましたが、pushViewControllerdismissViewControllerも機能しません。モーダルを閉じると、ビュー 2 が閉じません。モーダルでさえ消えないことがあります。ベース ビューはUITableViewControllerで、他の 2 つはUIViewControllersで、私は を使用してstoryboardいます。

4

1 に答える 1

1

NSNotificationCenter使用するか、デリゲートパターン を使用できるいくつかのオプションがあります。NSNotificationCenterは使いやすいですが、注意が必要です。

通知センターを使用するには、ビュー コントローラー クラスにオブザーバーを追加する必要があります。モーダル ビュー コントローラーを閉じると、ビュー 3 が現在閉じられていることをビュー 2 に通知し、view2 自体を閉じることができます.....

したがって、基本的にセンターに通知すると、通知されたものは何でもメソッドを実行します....

ビュー 3 で、ビューを閉じたいとしましょう。

in view3 .m

-(IBAction)yourMethodHere
{
        //dissmiss view
        [self.navigationController dismissModalViewControllerAnimated:YES];
         // or [self dismissModalViewControllerAnimated:YES]; whateever works for you 

        //send notification to parent controller and start chain reaction of poping views
        [[NSNotificationCenter defaultCenter] postNotificationName:@"goToView2" object:nil];
}

ビューで 2。時間

// For name of notification
extern NSString * const NOTIF_LoggingOut_Settings;

2. m 前@implementation#imports

NSString * const NOTIF_LoggingOut_Settings = @"goToView2";

    @implementation
    -(void)viewDidAppear:(BOOL)animated{

        // Register observer to be called when logging out
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(loggingOutSettings:)
                                                     name:NOTIF_LoggingOut_Settings object:nil];
    }
    /*---------------------------------------------------------------------------
     * Notifications of 2 view
     *--------------------------------------------------------------------------*/
    - (void)loggingOutSettings:(NSNotification *)notif
    {
        NSLog(@"Received Notification - Settings Pop Over  popped");

        [self.navigationController popViewControllerAnimated:NO];// change this if you do not have navigation controller 

//call another notification to go to view 1 
        [[NSNotificationCenter defaultCenter] postNotificationName:@"goToFirstView" object:nil];
    }

view1.h の最初のビューに別のオブザーバーを追加します extern NSString * const NOTIF_FirstView;

in view 1.m 前@implementation#imports

NSString * const NOTIF_FirstView = @"goToFirstView";

@implementation
-(void)viewDidAppear:(BOOL)animated{

    // Register observer to be called when logging out
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(doYourThing:)
                                                 name:NOTIF_FirstView object:nil];
}
/*---------------------------------------------------------------------------
 * Notifications of 1 view
 *--------------------------------------------------------------------------*/
- (void)ldoYourThing:(NSNotification *)notif
{


 // do your thing
}
于 2013-01-09T20:46:10.040 に答える