ios - 为什么使用 setViewControllers 会从 UINavigationController 的导航栏中删除所有内容?

标签 ios objective-c xcode uiviewcontroller uinavigationcontroller

问题来了。我在 UINavigationController 中使用以下代码来交换 rootViewController。我需要能够在多个不同的屏幕之间交换 rootViewController 并允许用户从每个屏幕向下钻取(这显然是我需要 Nav Controller 的原因):

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

现在在阅读 UINavigationController 的类引用时,我看到“viewControllers”属性说:“ Root View Controller 在数组中的索引 0 处,后 View Controller 是在索引 n-2 处,顶部 Controller 在索引 n-1 处,其中 n 是数组中的项目数。”

当我在那里打印我的 viewControllers 数组的计数时,我得到 1,即当前的 rootViewController。顶部 Controller (我假设是导航栏)应该没有什么东西吗?

当我对新 View 使用 setViewControllers 时,导航栏中的所有内容都会消失。我要补充一点,我有一个左右按钮以及一个自定义标题按钮,它们都已初始化并在 init 方法中添加到导航栏,并且在它们消失在我身上之前一直工作正常。

如有任何帮助,我们将不胜感激。

最佳答案

因为 UINavigationController 管理 View Controller 的堆栈(数组),如果您要为它提供一个堆栈,它会释放并删除它的旧堆栈。如果您需要添加多个 View Controller ,您可以使用 -pushViewController:animated:completion: 并将除最后一个 View Controller 之外的所有 View Controller 的动画设置为 NO。

因为你给它的堆栈只包含一个 View Controller ,-count 会打印 1,事实上,它是顶 View Controller 。

关于ios - 为什么使用 setViewControllers 会从 UINavigationController 的导航栏中删除所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13362094/

相关文章:

objective-c - Xcode for How to call function from one class to another class function in iPhone Apps

ios - Swift 不会生成未使用的变量警告

ios - Openframeworks iOS 项目 : texture on ofSpherePrimitive breaks

ios - 为 UITableView 标题文本设置accessibilityLabel

iphone - 在 iOS 中保存加密 key 的安全方法

ios - 如何在后台上传 PHAssets

swift - 如何在 Swift 中为不同类型的 Action 创建继承类?

ios - 如何为 SFSpeechRecognitionTask 设置委托(delegate)?

ios - Xcode ld : library not found for -LFSCalendar

ios - 如何将应用程序中的音乐编程为在特定时间播放?