UINavigationController - Pop

时间:2011-09-11 16:03:05

标签: iphone ios uinavigationcontroller

我在导航堆栈中弹出项目时遇到了一些问题,并且不知道为什么它的行为类似。

Stack
A classA
B classB
C classC
D classD

在堆栈D,我创建另一个classD并将其添加到堆栈。

Stack
A classA
B classB
C classC
D classD
E classD

在我创建E并将其推入堆栈之前,我做一个pop来摆脱D以便堆栈成为

Stack
A classA
B classB
C classC
E classD

然而,当我弹出时,self.navigationController.viewcontrollers变为0并且我卡在C上,而E变得不可见。为什么pop会删除所有内容并转到C?

在didSelectRowAtIndexPath中的C中,我创建了一个ClassD并执行:

[self.navigationController pushViewController:ClassD animated:YES];

在didSelectRowAtIndexPath中的D,我创建另一个ClassD并执行:

[self.navigationController popViewControllerAnimated:NO]; //remove current and replace with new
[self.navigationController pushViewController:ClassD animated:YES];

但似乎并没有像预期的那样做。我觉得从流行到推动的过渡似乎太快没有出现?有任何想法吗?

1 个答案:

答案 0 :(得分:0)

听起来popViewController也将self.navigationController设置为nil。如果self.navigationControllernil,则[self.navigationController anyMethod]不执行任何操作。

试试这个(未经测试):

UINavigationController *nav = self.navigationController;

[nav popViewControllerAnimated:NO]; //this pops myself
[nav pushViewController:anotherInstanceOfClassD animated:YES];

如果这个causes the problem that self is beeing destroyed然后在pop:

之前添加以下行
[[self retain] autorelease]