- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在使用 UINavigationController 的 iPhone 应用程序时遇到问题。当我使用 pushNavigationController 时,它工作正常。 iPhone 在切换到下一个 ViewController 时执行其动画。但是,当使用 ViewController 数组和 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 堆栈。如果我只添加第一个 Controller ,这将正常工作。但是在动画应该转到第二个 Controller 的情况下,导航栏的标题不会是“飞入”。取而代之的是一个空标题,直到动画结束。而且,更糟糕的是,如果我用自定义按钮替换导航栏标题,这个按钮将显示在左上角,直到动画结束。这是一个相当大的显示错误。
我尝试对多个 pushViewController 方法使用变通方法,但动画看起来/感觉不对。我希望导航以与 pushViewController 相同的方式执行其动画。这里唯一的区别是,我不添加 VC,而是一次设置整个堆栈。这里有另一种解决方法,还是可以将其视为框架的错误?我想过只对 VC2 使用 pushNavController,然后以某种方式将 VC1 插入堆栈,但这似乎不可能。
感谢所有提示和建议。 :-)
技术数据:我使用的是 iOS 4.2,为 4.0 编译。
最佳答案
终于找到了解决办法。错误是在动画完成之前,新的顶级 NavigationController 尚未初始化和正确加载。在我的例子中,UserAssignmentsListViewController
有一个 viewDidLoad
方法,在动画完成之前不会调用该方法,但它会设置导航标题(此处为 UIButton)。因此动画失败。
解决方案是在将它插入堆栈时引用一个已经初始化的 View Controller 。所以在某处初始化我们的顶级 VC:
// initialize our top-level controller
ViewController* viewController2 = [[[ViewController alloc]
initWithNibName:@"ViewController" bundle:nil] autorelease];
然后,当将两个或多个 VC 插入堆栈时,顶层的 VC 已经初始化并且动画有效(按照我最初问题中的示例):
NSMutableArray* viewControllers = [NSMutableArray arrayWithCapacity:2];
// put us on the stack, too
[viewControllers addObject:self];
ViewController* viewController1 = [[[ViewController alloc]
initWithNibName:@"ViewController" bundle:nil] autorelease];
[viewControllers addObject:viewController1];
if (someCondition == YES)
{
[viewControllers addObject:viewController2];
}
[self.navigationController
setViewControllers:[NSArray arrayWithArray:viewControllers] animated:YES];
关于objective-c - 在 iPhone 上使用 UINavigationController 的 setViewController 行为不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4346116/
我有一个简单的问题:我的自定义 UITabBarController子类同时覆盖 setViewControllers:和 setViewControllers:animated: .在 Storyb
我正在尝试实现一个 PageViewController,当按下按钮时它会切换到不同的 ViewController。我可以在 viewDidLoad() 期间使用 setViewController
我正在尝试使用 NEXT 按钮更改 UIPageViewController 的当前 ViewController。所以我使用委托(delegate)在我的 mainViewController 中调
我遇到了一个奇怪的问题,我不知道这是我的错误(最有可能)还是 UINavigationController 中的错误。 我在我的应用程序中使用 UINavigationController。在某些情况
当我设置 UIPageViewController 时,我无法理解这行代码: [self.pageViewController setViewControllers:@[startingViewC
我遇到了一个非常奇怪的情况 - 调用 method UINAvigationController -> setViewControllers:animated: 导致应用程序崩溃。仅在 iOS 10.
我正在尝试使用名为 Remenu 的第三方下拉菜单,可在此处找到 https://github.com/romaonthego/REMenu 菜单正在出现,但是当我尝试单击某个项目时,我总是看到黑屏。
我正在尝试使用导航菜单从一个 View Controller 转到另一个 View Controller 。我的问题是它将从 AddNewHomeTableViewController 访问代码,但不
这是我的层次结构: A - B - C - D (tabs) | | | | | | | | ----------------> AddEventViewController
我发现 setNavigationBarHidden 在 setViewControllers 之后不起作用? 这是我的代码: HomeNavController.swift: class HomeN
我有一个 UIPageViewController,其中有两个 UIViewController 作为子级。我希望用户能够在 subview 之间进行分页,但我也希望能够自动调用页面。 我已经尝试了使
“无法使用类型为‘([AnyObject],方向:UIPageViewControllerNavigationDirection,动画:Bool,完成:nil)’的参数列表调用”‘setViewCon
一段时间以来,我一直在处理这个(有点)随机错误,但无法找出问题所在。上下文:我正在创建一个 UISplitView iPad 应用程序,它在主视图中有一个 UINavigationController
我正在使用具有水平滚动功能的 UIPageViewController...只要用户滚动,UIPageControl 就会正常工作,以编程方式跳转到下一页或上一页时会出现问题 [self.pageVi
注意到奇怪的事情:当您使用 setViewControllers:animated 替换 UINavigationController 中的 View Controller 堆栈时:动画过程中显示后退
我的 UINavigationController 有一个奇怪的问题。 我编写了一个应用程序来显示三个级别的数据。 ( Root View :选择数据 I,第二 View :选择数据 II,第三 Vi
我第一次尝试让 UIPageViewController 工作,但每当我尝试设置它的 View Controller 时,我似乎都遇到了麻烦。 override func viewDidLoad()
问题来了。我在 UINavigationController 中使用以下代码来交换 rootViewController。我需要能够在多个不同的屏幕之间交换 rootViewController 并允
我正在制作一个使用 UIPageViewController 在页面之间导航的应用程序。一切正常,除了当我尝试手动更改使用 setViewControllers 显示的 View Controller
我尝试在用户点击按钮时更改导航 Controller 中的 View Controller ,因此我声明了以下代码: if standingsViewController == nil { st
我是一名优秀的程序员,十分优秀!