我在导航控制器中有三个视图控制器。一个是根,其他应该分别在满足conditionA或conditionB时出现。
如果两个条件都为真,我希望显示conditionA View Controller。如果事情发生变化,且条件A不再满足,但条件B仍然存在,我想显示conditionB View Controller。这意味着我希望能够从conditionA View Controller转到conditionB View Controller,反之亦然,直到满足这两个条件。但是,我总是希望后退按钮将用户发送到根目录。
为了实现这一点,同时避免诸如“在意外状态下完成导航过渡”之类的错误,我从Dave DeLong的回答https://stackoverflow.com/a/11821263/2524427中获取了代码。
(void)somethingChanged:(NSNotification*)notification
{
if(!conditionA && !conditionB){return;}
NSArray *viewControllers = self.navigationController.viewControllers;
NSMutableArray *newViewControllers = [NSMutableArray array];
// preserve the root view controller
[newViewControllers addObject:[viewControllers objectAtIndex:0]];
if(conditionA)
{
// add the new view controller
[newViewControllers addObject:[self.storyboard instantiateViewControllerWithIdentifier:@"conditionAViewController"]];
// animatedly change the navigation stack
[self.navigationController setViewControllers:newViewControllers animated:YES];
return;
}
if(conditionB)
{
// add the new view controller
[newViewControllers addObject:[self.storyboard instantiateViewControllerWithIdentifier:@"conditionBViewController"]];
// animatedly change the navigation stack
[self.navigationController setViewControllers:newViewControllers animated:YES];
}
}
这几乎完美无缺。但是,如果我有以下序列
如何在这些视图控制器之间来回切换?
答案 0 :(得分:0)
而不是您链接的问题中的解决方案。试试这个
在条件A视图控制器和条件B视图控制器中启用您自己的后退按钮UIBarButtonItem
作为navigationBar的leftBarButtonItem
连接一个动作
- (IBAction)dismiss:(id)sender {
[self.navigationController popToRootViewControllerAnimated:YES];
}