加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 为什么使用setViewControllers从UINavigationController

发布时间:2020-12-14 17:39:49 所属栏目:百科 来源:网络整理
导读:这是问题所在.我在UINavigationController中使用以下代码来交换rootViewController.我需要能够在许多不同的屏幕之间交换rootViewController,并允许用户从每个屏幕向下钻取(这显然是我需要导航控制器的原因): SomeViewController *tmp = [[SomeViewControlle
这是问题所在.我在UINavigationController中使用以下代码来交换rootViewController.我需要能够在许多不同的屏幕之间交换rootViewController,并允许用户从每个屏幕向下钻取(这显然是我需要导航控制器的原因):

SomeViewController *tmp = [[SomeViewController alloc] initWithNibName:@"SomeViewController" bundle:nil];
NSArray * viewControllers = [self viewControllers];
NSArray * newViewControllers = [NSArray arrayWithObjects:tmp,nil];
[self setViewControllers:newViewControllers];

现在在阅读UINavigationController的类引用时,我看到对于“viewControllers”属性,它说:“根视图控制器在数组中的索引0处,后视图控制器在索引n-2处,以及顶部控制器在索引n-1处,其中n是数组中的项目数.“

当我在那里打印我的viewControllers数组的计数时,我得到1,当前的rootViewController.如果顶级控制器(我假设是导航栏)没有东西吗?

只要我将setViewControllers与新视图一起使用,导航栏中的所有内容都会消失.我将添加我有一个左右按钮以及一个自定义标题按钮,它们都已初始化并添加到init方法的导航栏中,并且一直工作正常,直到它们消失在我身上.

任何帮助将不胜感激.

解决方法

因为UINavigationController管理视图控制器的堆栈(数组),如果你要为它提供一个堆栈,它将解除分配并删除它的旧堆栈.如果需要添加多个视图控制器,可以使用-pushViewController:animated:completion:除最后一个视图控制器外,所有操作都设置为NO.

因为你给它的堆栈只包含一个视图控制器,-count会打印1,实际上它将是顶视图控制器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读