如,从 rootViewControlle(presentViewControlle)到 ViewControlle1,再从ViewControlle1(presentViewControlle)到 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 dismissViewControlle到rootViewControlle
- (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];
}
移除通知的地方自己可以根据自己的项目而用,该什么时候移除、在哪个方法中移除等考虑