我在我的UITableViewController
中创建了一个按钮作为左栏按钮项目,用于记录当前用户和segue以及登录ViewController
。
问题是点击它会在登录ViewController
上创建一个后退按钮,用户可以返回上一个视图。
答案 0 :(得分:4)
通常,应用程序流程就像我们将loginViewController
设置为应用程序的rootviewcontroller
一样,我们根据应用程序流程及其需要推送nextViewController
。但在你的情况下,你会在退出时再次推送loginViewController
而不是popToRootViewControllerAnimated
代码
因此,在您的注销按钮clickEvnet:
上使用以下代码[self.navigationController popToRootViewControllerAnimated:YES];
我不建议使用隐藏BackBarButton并执行任何其他技巧,只需执行popToRootViewControllerAnimated
如果您在swift中执行代码,则可以使用以下代码:
self.navigationController?.popToRootViewControllerAnimated(true)
<强>更新强> 我只是为你创建一个例子。您可以从以下网址下载:
https://github.com/nitingohel/swiftSeque
其输出如下:
答案 1 :(得分:2)
您的架构错了。您不应该对登录控制器进行segue,这样导航堆栈就不会是空的,并且您将在注销事件之前拥有所有视图控制器。按下注销按钮时,您可以执行的操作是:
如果是根视图控制器:
[self.navigationController popToRootViewControllerAnimated:true];
如果不是:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *login = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
[self.navigationController setViewControllers:@[login] animated:true];
答案 2 :(得分:2)
我认为你的app导航控制器流程是错误的。登录视图控制器应该是导航控制器的rootview控制器,或者它应该是初始视图控制器。你有另一个像Wybierz miasto
的viewcontroller !!它不应该是这样的。
你可以打电话
[self.navigationController popToRootViewControllerAnimated:YES];
从导航堆栈的任何视图控制器转到rootview控制器。 (即退出)。
如果您必须要求这样的流程,那么您可以隐藏并显示像<,p>这样的后退按钮
self.navigationItem.hidesBackButton = YES; //NO for show
如果你想隐藏特定视图控制器的导航栏,你可以这样做
-(void)viewWillAppear:(BOOL)animated{
[self.navigationController.navigationBar setHidden:YES];
}
-(void)viewDidDisappear:(BOOL)animated{
[self.navigationController.navigationBar setHidden:NO];
}
在评论中提到的swift更新
self.navigationItem.hidesBackButton = true
和
self.navigationController!.popToRootViewControllerAnimated(true)
和
override func viewWillAppear(animated: Bool) {
self.navigationController!.navigationBar.hidden = true
}
override func viewDidDisappear(animated: Bool) {
self.navigationController!.navigationBar.hidden = false
}
如果有任何错误,请尽快避免错误!对swift不太熟悉!
希望这会有所帮助:)
答案 3 :(得分:1)
不要隐藏navigationBarItem
之类的技巧。不建议这样做。而不是那个电话
[self.navigationController popToRootViewControllerAnimated:YES];
始终将登录屏幕保持为RootViewController
答案 4 :(得分:0)
在登录视图控制器viewWillAppear
方法中使用此代码隐藏后退按钮
self.navigationItem.hidesBackButton = YES;
并隐藏导航栏
[[self navigationController] setNavigationBarHidden:YES];
如果您有任何问题,请告诉我
答案 5 :(得分:0)
使用此代码适用于您:
self.navigationItem.hidesBackButton = YES;
答案 6 :(得分:0)
此代码仅用于删除后退按钮。
override func viewWillAppear(_ animated: Bool) {
self.navigationItem.hidesBackButton = true
}
希望这会起作用。