1. 程式人生 > >實現檢視控制器一次 dismissViewController 兩個檢視控制器

實現檢視控制器一次 dismissViewController 兩個檢視控制器

如,從 rootViewControllepresentViewControlle)到 ViewControlle1,再從ViewControlle1presentViewControlle)到 ViewControlle2。現在實現從(ViewControlle2)直接dismissViewControlle rootViewControlle

 1. dismiss兩個檢視控制器的按鈕方法該檢視控制器ViewControlle2)是上個檢視控制器(ViewControlle1 presentViewControlle 的控制器

- (void)dismissButton:(UIButton *)sender
{
    //  當本檢視控制器dismiss 完成後註冊通知,名為“dismiss”
    [self dismissViewControllerAnimated:NO completion:^{
        [[NSNotificationCenter defaultCenter] postNotificationName:@"dismiss" object:self];
    }];
}

 2. ViewControlle1.m 中的 viewWillAppear: 方法中監測上一個檢視控制器dismissViewControlle的通知,監測到之後就執行dismissSelf: 裡的方法

- (void)viewWillAppear:(BOOL)animated
{
    NSNotificationCenter *notification = [NSNotificationCenter defaultCenter];
    [notification addObserver:self selector:@selector(dismissSelf:) name:@"dismiss" object:nil];
}

3.得到通知執行的方法,讓 ViewControlle1 dismissViewControllerootViewControlle

- (void)dismissSelf:(NSNotificationCenter *)notification
{
    [self dismissViewControllerAnimated:NO completion:^{
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"dismiss" object:nil];
    }];
}

4.移除通知,可以在

viewDidDisappear:方法中執行

- (void)viewDidDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"dismiss" object:nil];
}
移除通知的地方自己可以根據自己的專案而用,該什麼時候移除、在哪個方法中移除等考慮