2011-06-17 24 views
1

我在tabbar控制器中有2个选项卡栏,每个选项卡都带有一个导航控制器。在一个给定的行动中,我想在一个执行一个命令,另一个执行一个命令。例如:目标C:在切换之前立即在tabbar中执行命令

// in my current tabbar, pop back to root view 
[self.navigationController popToRootViewControllerAnimated:YES]; 

// go to the first tab bar 
self.tabBarController.selectedViewController 
= [self.tabBarController.viewControllers objectAtIndex:0]; 

单独执行时,上面的代码可以正常工作。但是,按照上述顺序进行布局时,只执行第一个命令,而不执行第二个命令。

奇怪的是,当我切换序列,它的工作原理。

这里发生了什么事情导致这两种不同的情况?

+0

请确保self.tabBarController不是零... – 2011-06-17 08:13:00

+0

它不是。一切正常。我想更好地理解的是为什么序列在这里很重要 – 2011-06-17 08:39:21

+1

不确定你的层次结构,但也许第一个命令改变了视图/控制器混乱,第二行无法工作。 – Eiko 2011-06-17 09:47:00

回答

2

只要你做,

[self.navigationController popToRootViewControllerAnimated:YES]; 

您分离从导航堆栈的视图控制器。这会将navigationController属性设置为nil,因为它不再属于该堆栈。该属性包含有效值是不合适的。

同样的事情适用于tabBarController属性。只要导航控制器是标签栏控制器的一部分,或者它是该导航控制器的一部分,它就会被设置。这也设置为nil以及该声明的末尾。

切换语句将工作,因为它不会改变导航堆栈,直到您的任务完成。

相关问题