【问题标题】:LogOut button creates back buttonLogOut 按钮创建返回按钮
【发布时间】:2016-09-08 07:07:24
【问题描述】:

我在UITableViewController 中创建了一个按钮作为左栏按钮项,用于注销当前用户并继续登录ViewController

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

【问题讨论】:

  • 你能展示一下你为它写的东西吗?
  • 在 VIewWillApper 中隐藏您的 NavigatoinBar。
  • 你的架构错了。您不应该对登录控制器进行 segue,这样导航堆栈就不会为空,并且您将拥有注销事件之前的所有视图控制器。当您按下注销按钮时,您可以做的是: 实例化一个新的视图控制器(登录控制器)并将导航控制器的视图控制器设置为仅登录控制器。你使用的是swift还是objective-C?我可以告诉你怎么做。你也可以(这是最好的方式)弹出到根视图控制器(self.navigationController.popToRootViewController)
  • 你好。我正在快速编码。我的初始视图控制器是登录视图控制器。当您登录时,它会将您转到连接到导航控制器的“Wybierz Miasto”TableViewController。 “Wybierz Miasto”有一个左栏按钮,可以让您退出。 @FlavioSilverio
  • 使用 self.navigationController?.popToRootViewControllerAnimated(true) 快速弹出视图控制器

标签: ios swift uitableview button uibutton


【解决方案1】:

通常应用程序流程的工作方式就像我们将loginViewController 设置为我们的应用程序的rootviewcontroller,然后我们根据我们的应用程序流程及其需要推送nextViewController。但在您的情况下,您在注销时再次推送loginViewController,而不是您需要popToRootViewControllerAnimated 代码

所以在您的注销按钮 clickEvnet 上使用以下代码:

[self.navigationController popToRootViewControllerAnimated:YES];

我不建议使用隐藏 BackBarButton 并做任何其他你可以通过放置 popToRootViewControllerAnimated 来完成的技巧

如果您正在快速编写代码,您可以使用以下代码:

 self.navigationController?.popToRootViewControllerAnimated(true)

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

https://github.com/nitingohel/swiftSeque

它的输出如下:

【讨论】:

  • @NitinGohel 非常感谢您的帮助。不幸的是,我没能用“poptoroot”做到这一点。相反,我在 viewWillAppear 方法中使用了 self.navigationItem.hidesBackButton = true self.navigationController?.setNavigationBarHidden(true, animated: false) 它对我有用。
  • @Michal 好吧,但这不是你必须考虑的好习惯。因为在每次注销时,您都会推送一个新的 loginviewcontroller 对象。
【解决方案2】:

您的架构是错误的。您不应该对登录控制器进行 segue,这样导航堆栈就不会为空,并且您将拥有注销事件之前的所有视图控制器。当您按下注销按钮时,您可以做的是:

如果是根视图控制器:

[self.navigationController popToRootViewControllerAnimated:true];

如果没有:

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

【讨论】:

  • 您好,谢谢。有用。我快速编码,但我设法转换了您的代码。不幸的是,当它让我退出并带我回到登录视图控制器时,它会显示带有控制器标题的顶部栏。我应该使用以下方法隐藏它:self.navigationController!.navigationBar.hidden = true 吗?
  • 如果你这样做,请确保它在 viewWillDisappear 上再次可见,然后它会正常工作。
  • 但是如果我不需要它,我为什么要这样做呢?
  • 如果你不需要它,你可以去故事板并明确设置你想要隐藏它。
  • 我该怎么做?
【解决方案3】:

我认为您的应用程序导航控制器流程是错误的。登录视图控制器应该是导航控制器的根视图控制器,或者它应该是初始视图控制器。您还有另一个视图控制器,例如 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 中出现任何错误!对swift不太熟悉!

希望这会有所帮助:)

【讨论】:

  • 太棒了,我不知道你的答案有什么新东西,你是怎么得到 +
  • 您好,谢谢。抱歉,我没有指定我使用 Swift 编码。我的初始视图控制器是登录视图控制器。当您登录时,它会将您转到连接到导航控制器的“Wybierz Miasto”TableViewController。 “Wybierz Miasto”有一个左栏按钮,可以让您退出。这有什么问题吗?
  • 那么您应该将其标题更改为注销,或者您应该隐藏它并使用另一个按钮到您想要的位置并从该按钮单击调用poptorootviewcontroller
  • @Lion 非常感谢。我是否应该将“hideButton”和“popToRoot”代码放入注销操作中,是否还应该使用 segue 和 performSegue 方法?
  • 你应该在 viewdid 加载中隐藏按钮,你应该在注销按钮的操作中使用 poptoroot
【解决方案4】:

不要做隐藏navigationBarItem之类的伎俩。不建议这样做。而不是那个电话

 [self.navigationController popToRootViewControllerAnimated:YES]; 

始终保持登录屏幕为RootViewController

【讨论】:

    【解决方案5】:

    使用适合您的代码:

    self.navigationItem.hidesBackButton = YES;
    

    【讨论】:

      【解决方案6】:

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

      self.navigationItem.hidesBackButton = YES;
      

      并隐藏导航栏

      [[self navigationController] setNavigationBarHidden:YES];
      

      如果您有任何问题,请告诉我

      【讨论】:

      • 谢谢。有用。没有返回按钮了,但不幸的是导航栏仍然存在。我能做什么?
      • 使用此代码 [[self navigationController] setNavigationBarHidden:YES];@Michal
      【解决方案7】:

      此代码仅用于移除后退按钮。

      override func viewWillAppear(_ animated: Bool) {
              self.navigationItem.hidesBackButton = true
          }
      

      希望这会奏效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        • 1970-01-01
        相关资源
        最近更新 更多