我在使用 UINavigationController 的 iPhone 应用程序时遇到问题。当我使用 pushNavigationController 时,它工作正常。iPhone 在切换到下一个 ViewController 时执行其动画。但是当使用 ViewControllers 数组和 setViewControllers 方法时,它会在动画中出现一个小故障,这可能会发展成一个清晰可见的动画错误。
以下代码片段在根 ViewController 中调用。根据条件,它应该切换到 ViewController1,或者应该直接转到 ViewController2。在后一种情况下,用户可以导航回 vc1,然后导航到根目录。
NSMutableArray* viewControllers = [NSMutableArray arrayWithCapacity:2];
// put us on the stack
[viewControllers addObject:self];
// add first VC
AuthentificationViewController* authentificationViewController =
[[[AuthentificationViewController alloc] initWithNibName:@"AuthentificationViewController" bundle:nil] autorelease];
[viewControllers addObject:authentificationViewController];
if (someCondition == YES)
{
UserAssignmentsListViewController* userAssignmentsListViewController =
[[[UserAssignmentsListViewController alloc] initWithNibName:@"UserAssignmentsOverviewViewController" bundle:nil] autorelease];
[viewControllers addObject:userAssignmentsListViewController];
}
[self.navigationController
setViewControllers:[NSArray arrayWithArray:viewControllers] animated:YES];
如您所见,我将添加第一个,也许是第二个 VC 到数组中,最后设置带有动画的 navigationController 堆栈。如果我只添加第一个控制器,这可以正常工作。但是在动画应该转到第二个控制器的情况下,导航栏的标题不会是“飞入”。取而代之的是一个空标题,直到动画完成。而且,更糟糕的是,如果我用自定义按钮替换导航栏标题,这个按钮会一直显示在左上角,直到动画结束。这是一个显示错误。
我尝试使用多个 pushViewController 方法的解决方法,但动画看起来/感觉不正确。我希望导航以与 pushViewController 相同的方式进行动画处理。这里唯一的区别是,我不添加 VC,而是一次设置整个堆栈。这里有另一种解决方法,还是可以将其视为框架的错误?我考虑过只对 VC2 使用 pushNavController,然后以某种方式将 VC1 插入堆栈,但这似乎是不可能的。
感谢所有提示和建议。:-)
技术数据:我使用的是 iOS 4.2,为 4.0 编译。