【问题标题】:Accessing UINavigationController at Top of Stack在栈顶访问 UINavigationController
【发布时间】:2013-02-17 17:19:41
【问题描述】:

如何从堆栈顶部的 UINavigationController 获取对 UINavigationController 的 backBarButtonItem 的引用。在某些情况下,我希望在某些网络代码完成之前禁用返回。

self.parentViewController.navigationItem.backBarButtonItem.target = self; self.parentViewController.navigationItem.backBarButtonItem.action = @sel...;

不起作用 委托方法

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item

也不行。

【问题讨论】:

  • 澄清一下,无论您在导航控制器堆栈中的哪个位置,您是否都希望禁用问题视图控制器的后退按钮。或者您是否希望拦截按下的后退按钮并进行干预?
  • 拦截。在某些情况下需要停止返回按钮。
  • QuestionVC 看起来不像是导航控制器堆栈的一部分。您是否只是缺少从 Main VC 到标签栏控制器的连接?在您的问题中,您将什么称为“栈顶”?
  • 是的,有 segue [未显示]。我的错!

标签: iphone uinavigationcontroller uitabbarcontroller storyboard uinavigationitem


【解决方案1】:

一个答案和一个建议:

答案:我建议您稍微更改您的 MVC 模型,使模型中的 BOOL 属性根据网络活动是否完成而打开或关闭,然后使用您的 QuestionsVC 采用的委托/协议来更新后退按钮设置为该属性更改。您需要在 QuestionsVC 的委托方法中添加以下内容:

[self.tabBarController.navigationItem setHidesBackButton:YES animated:YES];

我测试了它,它可以工作。

建议:从不建议将 UITabBarController 放在 UINavigationController 中(仅建议相反)。在您深入了解您的项目之前,我会做出相应的调整。

更新: 如果您愿意,我可以理解需要一个 mainVC 作为启动 VC,并带有一个“启动”按钮。您是正确的,您需要一个 NavController 才能推送/弹出 VC 并在 Storyboard 中使用 segue。但这不是显示 VC 序列的唯一方法,您可以展示/关闭 VC。所以在你的情况下:

1- 我会删除第一个 NavController

2- 通过将 NavController 左侧的箭头移动到 MainVC 左侧,使 MainVC 成为起始 VC(入口点)

3- 断开主 VC 与 TabBar 控制器的连接(删除该链接),因为如果没有导航控制器,您将无法在 SB 中使用 segues。您将必须实例化并呈现该标签栏控制器。

4- 添加一个新的对象文件 (.m/.h) - UITabBarController 的子类,并将 IB 中的 tabBarController 的类更改为您的子类的名称。如果它没有显示在 IB 的类列表的下拉列表中,您可能需要构建/清理或重新启动 xcode。

5- 在 mainVC 中创建一个 IBAction 方法并将其链接到 Main VC 中的按钮。

6- 在该方法中(在您的主 VC 中),添加以下代码:

yourTabBarControllerSubClassName*  myTabController= [self.storyboard instantiateViewControllerWithIdentifier:@"theTab"];
[self presentViewController:myTabController animated:YES completion:nil];

7- 确保在您的 SB 中选择标签栏控制器并在身份检查器中,将 SB ID 设置为“theTab”并选中“使用 SB ID”。

8- 如果问题 VC 或状态表 VC 在每个问题中都有一系列 VC,您可以将每个 VC 嵌入到导航控制器中,这样就可以了。

在这种情况下,您可能不需要担心那个后退按钮,因为它不再存在了!

祝你好运

希望这会有所帮助。

【讨论】:

  • 你应该把它放在 QuestionsVC 中,因为这是你想要在导航项中隐藏后退按钮的 VC。它应该可以工作。
  • 好吧...是的,不知道我在想什么,你的答案是正确的。以及一个很好的启动建议。我在 UINav 中嵌入了 MainVC,因此我可以在 MainVC 上推送 TabBVC。我无法从没有 UINav 的东西中推动,这就是它存在的原因。接受建议;)
  • 我将根据您对项目的有限了解,根据建议编辑我的答案!
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多