我在我的UITableViewController
中创建了一个按钮作为左栏按钮项目,以便将当前用户注销并继续登录并登录ViewController
。LogOut按钮创建后退按钮
问题是,点击它会在登录ViewController
上创建一个返回按钮,用户可以返回到上一个视图。
我在我的UITableViewController
中创建了一个按钮作为左栏按钮项目,以便将当前用户注销并继续登录并登录ViewController
。LogOut按钮创建后退按钮
问题是,点击它会在登录ViewController
上创建一个返回按钮,用户可以返回到上一个视图。
你的架构是错误的。您不应该对登录控制器进行细分,这样导航堆栈将不会为空,您将在注销事件之前拥有所有视图控制器。当您按下退出键,你可以做的是:
如果它是根视图控制器:
[self.navigationController popToRootViewControllerAnimated:true];
如果不是:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *login = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
[self.navigationController setViewControllers:@[login] animated:true];
通常应用程序流程工作就像我们将loginViewController
设置为我们的应用程序的rootviewcontroller
一样,并根据我们的应用程序流程和需要推送nextViewController
。但在你的情况下,你是在退出时间,而不是你需要popToRootViewControllerAnimated
代码
因此使用下面您注销按钮clickEvnet代码再次推loginViewController
:
[self.navigationController popToRootViewControllerAnimated:YES];
我不建议使用隐藏BackBarButton和做任何其他的窍门,你可以把一个popToRootViewControllerAnimated
如果你正在做的代码在迅速简单地做,你可以使用下面的代码:
self.navigationController?.popToRootViewControllerAnimated(true)
UPDATE 我只是为你创建一个例子。您可以从以下网址下载:
https://github.com/nitingohel/swiftSeque
它的输出就像下面:
@NitinGohel我真的很感谢你的帮助。不幸的是,我没有设法与“poptoroot”做到这一点。相反,我用self.navigationItem.hidesBackButton = true self.navigationController ?.在viewWillAppear方法中setNavigationBarHidden(true,animated:false),它对我有用。 – Michal
@Michal没问题,但这不是你需要考虑的好习惯。因为在每次注销时,都会推送一个loginviewcontroller的新对象。 –
使用此代码对你有用:
self.navigationItem.hidesBackButton = YES;
您的应用程序的导航控制器的流量是错误的我认为。登录视图控制器应该是导航控制器的rootview控制器,或者它应该是初始视图控制器。你有另一个视图控制器,如Wybierz miasto
!它不应该这样。
您可以拨打
[self.navigationController popToRootViewControllerAnimated:YES];
从导航堆栈中的任何视图控制器去rootview控制器。 (即注销)。
如果必须要求流像这样,那么你可以隐藏和显示后退按钮一样,
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];
}
在评论中询问的快速更新
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不太熟悉!
希望这将有助于:)
不要做这样躲在navigationBarItem
。它的技巧不建议。而不是调用
[self.navigationController popToRootViewControllerAnimated:YES];
始终保持登录屏幕RootViewController
您可以显示你写的呢? –
在VIewWillApper中隐藏您的NavigatoinBar。 –
你的架构是错误的。您不应该对登录控制器进行细分,这样导航堆栈将不会为空,您将在注销事件之前拥有所有视图控制器。当你按下注销按钮时,你可以做的是:实例化一个新的视图控制器(登录之一),并将导航控制器的视图控制器设置为仅仅是登录控制器。你使用的是swift还是objective-C?我可以告诉你如何去做。你也可以(并且这是最好的方式)弹出到根视图控制器(self.navigationController.popToRootViewController) –