我有两个导航视图控制器。当我点击属于第二个导航控制器的ViewController中的一个按钮时,我想关闭该导航控制器的完整视图控制器堆栈,并且想要转到第一个导航中的视图控制器控制器。我该怎么做?我试过[self.navigationController dismissViewControllerAnimated:YES completion:nil];
,似乎没有发生。怎么做?如何在导航视图控制器中关闭整个视图控制器堆栈?
回答
的错误一定在别处。您描述的代码正在使用确实有效。我创建了一个新项目,并提出一个非常简单的例子:
#import "ViewController.h"
@interface MyViewController : UIViewController
- (instancetype)initWithColor:(UIColor *)color;
@end
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self presentViewController:[[UINavigationController alloc] initWithRootViewController:[[MyViewController alloc] initWithColor:[UIColor redColor]]] animated:YES completion:nil];
}
@end
@implementation MyViewController
- (instancetype)initWithColor:(UIColor *)color {
if((self = [super init])) {
self.view.backgroundColor = color;
}
return self;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
CGPoint point = [touches.anyObject locationInView:nil];
if(point.x < self.view.frame.size.width*0.5 && point.y < self.view.frame.size.width*0.5) {
[self.navigationController pushViewController:[[MyViewController alloc] initWithColor:self.view.backgroundColor] animated:YES];
} else if(point.x > self.view.frame.size.width*0.5 && point.y < self.view.frame.size.width*0.5) {
[self.navigationController presentViewController:[[UINavigationController alloc] initWithRootViewController:[[MyViewController alloc] initWithColor:[UIColor greenColor]]] animated:YES completion:nil];
} else if(point.x < self.view.frame.size.width*0.5 && point.y > self.view.frame.size.width*0.5) {
[self.navigationController popViewControllerAnimated:true];
} else if(point.x > self.view.frame.size.width*0.5 && point.y > self.view.frame.size.width*0.5) {
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
}
@end
如果复制到一个新的项目,其中ViewController
是您的主视图控制器导航控制器将创建并呈现在视图没有出现在此。背景是红色的。
通过按屏幕的左上部分,相同颜色的新控制器将被推送到当前顶部导航控制器。
按右上角的按钮,新的导航控制器将显示绿色视图控制器。
按下左下方可以弹出当前视图控制器(如果有)。
然后按右下角将关闭顶部的导航控制器。
因此,您的情况是按左上角几次来在单个导航控制器上生成一堆视图控制器。然后按右上方显示另一个导航控制器(绿色)。按左上角几次,在绿色导航控制器上创建一堆视图控制器。现在按右下角关闭整个绿色堆栈并返回红色导航控制器堆栈。
检查你的代码多一点,看看你的情况是怎么回事,你为什么遇到问题在你的情况。首先检查self.navigationController
是否为零。
试试这个,我认为你的作品
self.navigationController?.popToRootViewController(animated: true)
你是否看到这个问题'我有两个导航视图控制器' –
Mitul,这不会工作,因为我想要显示的视图控制器位于另一个导航视图控制器中。 –
let storyboard = UIStoryboard.init(name:“storyboardname”,bundle:nil) mainNavVC = storyboard.instantiateViewController(withIdentifier:“navigationcontrollername”)as! UINavigationController mainNavVC。setNavigationBarHidden(true,animated:false) mainNavVC.setViewControllers([viewcontrollername],animated:true) self.window?.rootViewController = mainNavVC –
- 1. 如何从导航控制器中的视图控制器堆栈中获取特定的视图控制器?
- 2. ios swift - 关闭导航控制器的根视图控制器
- 3. 将多个视图控制器推入导航控制器堆栈的问题
- 4. 将视图控制器从一个视图控制器移动到另一个视图控制器而无需导航控制器堆栈
- 5. iOS:关闭视图控制器并推送新视图而不显示导航堆栈中的当前视图
- 6. 显示已经在导航堆栈上的视图控制器
- 7. 访问导航堆栈中的当前视图控制器
- 8. 重定向到导航堆栈中的新视图控制器
- 9. 将视图控制器推到ipad上的导航控制器堆栈前
- 10. NSOperationQueue避免将视图控制器推入导航控制器堆栈?
- 11. 关闭父视图控制器和子视图控制器
- 12. 弹出视图控制器关闭堆栈没有导航栏显示?
- 13. 如何访问堆栈视图中的视图控制器?
- 14. 从导航栏视图控制器导航到标签栏视图控制器
- 15. 如何关闭相机并导航到根视图控制器?
- 16. 释放与导航控制器相关的视图控制器
- 17. 在视图控制器内添加多个导航控制器?
- 18. 多个导航控制器中的视图控制器通信
- 19. 如何关闭 - 视图 - 控制器
- 20. 在哪里设置导航堆栈中的视图控制器导航项目
- 21. 如何调用视图控制器与导航控制器
- 22. Xcode:视图控制器何时添加到视图堆栈中?
- 23. 在新的导航控制器中嵌入视图控制器
- 24. 在视图控制器中使用导航控制器
- 25. 另一个导航控制器和视图控制器问题
- 26. 保持视图在导航控制器
- 27. 在视图控制器之间导航?
- 28. 如何在导航视图控制器上放置视图?
- 29. 堆叠视图控制器
- 30. 从当前视图控制器的子视图控制器导航到详细信息视图控制器
为什么你有两个导航控制器?他们如何相互关联? –
我想你可以设置self.navigationController.viewControllers = @ [],然后推动什么需要。我不知道你是否想要动画。 – TomCobo
@AndréSlotta他们互不相关 –