从导航堆栈中删除中间视图控制器 - iOS
Remove intermediate View Controllers from Navigation Stack - iOS
我有一个导航堆栈如下:
VcA -> VcB -> VcC
当我在VcC导航栏上按下后退按钮时,我想转到VcA。
我试过 [self.navigationController popToRootViewControllerAnimated:YES]
但它首先弹出到 VcB,然后转到 VcA。
我也试过这个:
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
[navigationArray removeObjectAtIndex: 1];
self.navigationController.viewControllers = navigationArray;
但是没用。还是先显示VcB再显示VcA
我在VcC的viewWillDisappear
中尝试了以上两个代码。
请帮忙解决这个问题。谢谢
试试这个:
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
尝试在没有动画的情况下弹出到root,
即 [self.navigationController popToRootViewControllerAnimated:NO] –
这很容易完成:
1.获取堆栈中存在的所有控制器的数组
NSArray *controllers = [self.navigationController viewControllers];
2。然后告诉导航控制器弹出到特定索引处的控制器(例如 0):
[self.navigationController popToViewController:[controllers objectAtIndex:0] animated:YES];
viewWillDisappear
来不及操作视图控制器堆栈;向视图控制器 B 的过渡已经在进行中。您应该使用 viewDidAppear
中的第二个代码块修改堆栈,以便在点击后退按钮时导航控制器转换回视图控制器 A
我有一个导航堆栈如下:
VcA -> VcB -> VcC
当我在VcC导航栏上按下后退按钮时,我想转到VcA。
我试过 [self.navigationController popToRootViewControllerAnimated:YES]
但它首先弹出到 VcB,然后转到 VcA。
我也试过这个:
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
[navigationArray removeObjectAtIndex: 1];
self.navigationController.viewControllers = navigationArray;
但是没用。还是先显示VcB再显示VcA
我在VcC的viewWillDisappear
中尝试了以上两个代码。
请帮忙解决这个问题。谢谢
试试这个:
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
尝试在没有动画的情况下弹出到root, 即 [self.navigationController popToRootViewControllerAnimated:NO] –
这很容易完成:
1.获取堆栈中存在的所有控制器的数组
NSArray *controllers = [self.navigationController viewControllers];
2。然后告诉导航控制器弹出到特定索引处的控制器(例如 0):
[self.navigationController popToViewController:[controllers objectAtIndex:0] animated:YES];
viewWillDisappear
来不及操作视图控制器堆栈;向视图控制器 B 的过渡已经在进行中。您应该使用 viewDidAppear
中的第二个代码块修改堆栈,以便在点击后退按钮时导航控制器转换回视图控制器 A