【问题标题】:Navigation Buttons Lost in Storyboard App故事板应用程序中的导航按钮丢失
【发布时间】:2014-12-22 11:02:52
【问题描述】:

我正在尝试调试使用 Storyboards 的 iOS 应用程序。首次显示问题场景时,它是正确的,如下所示:

当我通过点击“任何类别”等按钮之一导航到下一个场景然后再次导航时,导航按钮如下所示:

我无法找到导致这种变化的明显原因。我应该特别寻找可能会修改导航栏的东西吗?也许故事板进程有一些自动处理需要禁用?

这是提供上下文的故事板的一部分:

我还发现,如果我在导航栏和 segue 处理代码中显式添加后退按钮,它确实可以工作,但没有显示 V 形表示它导航回来。

viewDidLoad 中添加的代码:

UIBarButtonItem *backBtnItem = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:self action:@selector(backBtnClicked:)];

self.navigationItem.leftBarButtonItem = backBtnItem;
self.navigationItem.leftBarButtonItem.enabled = YES;    

及相关操作:

-(IBAction)backBtnClicked:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}

【问题讨论】:

  • 你使用的是什么 Segue 类型?
  • [self.navigationController.viewControllers count] 检查计数是否大于0
  • 第一个屏幕上的后退按钮通向哪里?故事板的图片可能会有用。
  • @Raghav [self.navigationController.viewControllers count] 返回 2
  • @Crazyrems 添加了故事板和转场截图。

标签: ios objective-c iphone uinavigationbar


【解决方案1】:

可能发生的是按钮导航到的视图控制器破坏了导航堆栈;应用程序在按下“任何类别”后转到的目标视图控制器正在以非标准方式使用导航控制器。

看看目标视图控制器。如果它旨在与导航控制器系统一起正常工作,则不应推送、弹出、segue-ing 或启动任何其他形式的导航本身。

目标视图控制器做什么?

【讨论】:

  • 两个视图控制器都使用 performSegueWithIdentifier 从其 uiscrollview 的内容导航到下一个视图。调查你的理论,我从目标视图控制器中撕掉了几乎所有的代码,导航栏开始正常运行!但是,我已将其追踪到在目标控制器中返回 YES 的 prefersStatusBarHidden。删除后,导航将正常工作。我不确定这是否只是您概述的问题的另一个症状?在滚动视图中处理导航的正确方法是什么?
  • 什么动作启动导航?它是在点击滚动视图内的视图吗?您可以使用 performSegueWithIdentifer 前进,但您需要使用 [self.navigationController popViewController] 后退。后退导航目前是如何处理的?
  • 是的,在滚动视图中点击前进,它使用 popViewControllerAnimated 返回。看来应该没问题。我会接受这个答案,因为它是最有帮助的,尽管我仍然不明白根本原因。
  • 您可以尝试通过only 使用导航栏中的后退按钮并禁用调用popViewController 的任何内容来简化导航。这会稍微改变用户体验,但可能会更加一致。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 2015-05-29
  • 2016-05-26
相关资源
最近更新 更多