2016-05-12 119 views
0

我在我的UITableViewController中创建了一个按钮作为左栏按钮项目,以便将当前用户注销并继续登录并登录ViewControllerLogOut按钮创建后退按钮

问题是,点击它会在登录ViewController上创建一个返回按钮,用户可以返回到上一个视图。

+0

您可以显示你写的呢? –

+1

在VIewWillApper中隐藏您的NavigatoinBar。 –

+0

你的架构是错误的。您不应该对登录控制器进行细分,这样导航堆栈将不会为空,您将在注销事件之前拥有所有视图控制器。当你按下注销按钮时,你可以做的是:实例化一个新的视图控制器(登录之一),并将导航控制器的视图控制器设置为仅仅是登录控制器。你使用的是swift还是objective-C?我可以告诉你如何去做。你也可以(并且这是最好的方式)弹出到根视图控制器(self.navigationController.popToRootViewController) –

回答

2

你的架构是错误的。您不应该对登录控制器进行细分,这样导航堆栈将不会为空,您将在注销事件之前拥有所有视图控制器。当您按下退出键,你可以做的是:

如果它是根视图控制器:

[self.navigationController popToRootViewControllerAnimated:true]; 

如果不是:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController *login = [storyboard instantiateViewControllerWithIdentifier:@"Login"]; 
    [self.navigationController setViewControllers:@[login] animated:true]; 
+0

你好,谢谢。有用。我用swift编写代码,但我设法改变了你的代码。不幸的是,当它将我注销并将我带回登录视图控制器时,它会显示带控制器标题的顶部栏。我应该使用它隐藏它:self.navigationController!.navigationBar.hidden = true ? – Michal

+0

如果你这样做,一定要让viewWillDisappear再次可见,那么它会正常工作。 –

+0

但为什么我应该这样做,如果我不需要它呢? – Michal

0

使用此代码在您的登录视图控制器viewWillAppear方法来隐藏后退按钮

self.navigationItem.hidesBackButton = YES; 

和隐藏导航栏

[[self navigationController] setNavigationBarHidden:YES]; 

让我知道如果你有任何问题,

+0

谢谢。有用。没有后退按钮了,但不幸的是导航栏仍然存在。我能做什么 ? – Michal

+0

使用此代码[[self navigationController] setNavigationBarHidden:YES]; @ Michal – Madhu

4

通常应用程序流程工作就像我们将loginViewController设置为我们的应用程序的rootviewcontroller一样,并根据我们的应用程序流程和需要推送nextViewController。但在你的情况下,你是在退出时间,而不是你需要popToRootViewControllerAnimated代码

因此使用下面您注销按钮clickEvnet代码再次推loginViewController

[self.navigationController popToRootViewControllerAnimated:YES]; 

我不建议使用隐藏BackBarButton和做任何其他的窍门,你可以把一个popToRootViewControllerAnimated

如果你正在做的代码在迅速简单地做,你可以使用下面的代码:

self.navigationController?.popToRootViewControllerAnimated(true) 

UPDATE 我只是为你创建一个例子。您可以从以下网址下载:

https://github.com/nitingohel/swiftSeque

它的输出就像下面:

enter image description here

+0

@NitinGohel我真的很感谢你的帮助。不幸的是,我没有设法与“poptoroot”做到这一点。相反,我用self.navigationItem.hidesBackButton = true self.navigationController ?.在viewWillAppear方法中setNavigationBarHidden(true,animated:false),它对我有用。 – Michal

+0

@Michal没问题,但这不是你需要考虑的好习惯。因为在每次注销时,都会推送一个loginviewcontroller的新对象。 –

0

使用此代码对你有用:

self.navigationItem.hidesBackButton = YES; 
2

您的应用程序的导航控制器的流量是错误的我认为。登录视图控制器应该是导航控制器的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不太熟悉!

希望这将有助于:)

+0

伟大的保持它我不知道你的答案是什么新的和你是怎么得到+ –

+0

你好,谢谢。对不起,我没有指定我在Swift中编写代码。我的初始视图控制器是登录viewController。当你登录时,它会将你连接到“Wybierz Miasto”TableViewController,它连接到导航控制器。 “Wybierz Miasto”有一个左栏按钮,可将您注销。这是否有问题? – Michal

+0

那么你应该改变它的标题注销,或者你应该隐藏它,并再次按钮到你想要的地方,并从该按钮调用'poptorootviewcontroller'点击 – Lion

1

不要做这样躲在navigationBarItem。它的技巧不建议。而不是调用

[self.navigationController popToRootViewControllerAnimated:YES]; 

始终保持登录屏幕RootViewController