1

enter image description here 如何从堆栈顶部的UINavigationController获取对UINavigationController的backBarButtonItem的引用。在某些情况下,我想禁用回去,直到某些网络代码完成。在堆栈顶部访问UINavigationController

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

不起作用 委托方法

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

也不起作用。

+0

需要清楚的是,您是否希望禁用问题视图控制器的后退按钮,而不管您在导航控制器堆栈中的位置。或者你是否想要拦截正在按下的后退按钮并进行干预? – Spectravideo328 2013-03-03 19:35:08

+0

拦截。在某些情况下需要停止按钮。 – Jordan 2013-03-03 21:14:40

+0

QuestionVC看起来不像是Nav Controller堆栈的一部分。你是否错过了从主VC到标签栏控制器的连接?你在问题中称什么“堆栈顶部”? – Spectravideo328 2013-03-03 21:47:55

回答

1

的答案和建议:

答案:我会建议你改变你的MVC模式稍微有模型中的布尔属性,是或者根据网络活动是否已完成,然后用关闭您的QuestionsVC采用的委托/协议,在该属性更改时更新后退按钮设置。您需要在QuestionVC中的代理方法中添加以下内容:

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

我测试了它,它工作正常。

建议:从来不建议在UINavigationController中使用UITabBarController(建议只使用反义词)。在你深入到你的项目之前,我会做相应的调整。

更新: 我可以理解,需要一个mainVC作为启动VC的按钮,以“开始”,如果你愿意。你是正确的,你需要一个NavController能够推动/弹出VC并在Storyboard中使用segues。但是,这不是显示一系列风险投资的唯一方式,您可以提交/解散风险投资。所以你的情况:

1 - 我会删除通过在NavController左侧移动的箭头MainVC

左侧的第一NavController

2-充分利用MainVC开始VC(切入点)

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

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,则可以将每个VC嵌入到导航控制器中,这样就可以了。

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

祝你好运

希望这会有所帮助。

+0

你应该把它放在QuestionsVC中,因为那是你想隐藏导航条中后退按钮的VC。它应该工作。 – Spectravideo328 2013-03-04 00:56:40

+0

好的...是的,不知道我在想什么,你的回答是正确的。还有一个很好的建议。我在UINav中嵌入了MainVC,所以我可以在MainVC上推TabBVC。我不能从没有UINav的东西推动,这就是为什么它在那里。对建议开放;) – Jordan 2013-03-04 01:15:27

+0

我将根据建议根据您项目的有限知识编辑我的答案! – Spectravideo328 2013-03-04 02:04:20