UINavigationController 没有推送/显示视图
Posted
技术标签:
【中文标题】UINavigationController 没有推送/显示视图【英文标题】:UINavigationController isn't pushing/displaying view 【发布时间】:2011-08-08 06:32:39 【问题描述】:ios 和目标 C 的新手。在 XCode 模拟器中开发 iPad 应用程序时自定义 UINavigationController 出现问题。非常感谢您的帮助!
在 XCode 中创建项目(基于视图的应用程序)。应用程序当前有两个视图。主页和详细视图。想要一个像 Facebook 或 Linkedin iPhone App 主页这样的主页...主页上有一堆图标/图像,然后单击每个以获取更多详细信息
(知识有限)总结主页不能是TableView、SplitView 或TabBarView。不希望主页中有任何选项卡或表格视图样式(如上所述)。所以无法使用“基于导航的应用程序”模板启动 XCode 项目
没有将 IB 中的 UI 元素添加到 MainWindow.xib,rathar 主页 UI 元素在项目模板创建的 otherView.xib 中。项目模板,在 appDelegate.didFinishLaunchingWithOptions 方法中将 rootViewController 分配给 otherViewController。 self.window.rootViewController = otherViewController
。
通过 IB 将 NavigationController 添加到 otherView.xib。增加了导航控制器的出口。 otherView.h 有以下内容
UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
NavigationController 的引用Outlet 已连接到文件的所有者
当应用程序启动时,主页(由 otherViewController 提供服务)出现。单击主页中的图标(后面带有按钮的 ImageView)时,如果我调用,则不会显示详细视图
[self.navigationController pushViewController:DetailViewController animated:YES];
(在 action 方法中,为那个按钮处理 touchUpInside。)
但如果我这样做,就会显示详细视图
self.view = DetailViewController.view;
或[self.view addSubview:DetailViewController.view];
所以 DetailView 加载它的 nibfile 等似乎不是问题。 按钮点击/触摸事件捕获等也没有问题。
A.当我在调试器中检查导航控制器时,它的堆栈中有两个视图控制器,rootView/主页位于索引 0,详细视图位于索引 1。导航控制器不为空。关于我缺少什么的任何想法?
B.我是否需要在主页(在其视图中添加导航控制器)和详细视图中都添加一个导航栏?我在详细视图中添加了一个导航栏。我不需要主页 UI 中的导航栏。
C.当通过 addSubview 调用或 self.view 分配(如上所述)显示详细视图时,navigationBar 不显示后退按钮(应显示“主页”)。 两个视图控制器都在设置适当的标题,使用 self.Title = "Home" 或 "Detail"。
感谢您的帮助。谢谢
【问题讨论】:
【参考方案1】:在appDelegate中,需要让导航控制器成为一个属性,然后写:
self.window.rootViewController = self.navigationController;
在应用程序 didFinishLaunchingWithOptions: 方法中。 然后将 otherViewController 推入其堆栈。我认为您犯的错误是将 UINavigationController 添加到 UIView 而不是相反,这是正确的方法!
【讨论】:
【参考方案2】:你也应该在你的 xib 文件中做些什么, 确保您查看的内容位于导航控制器中
您的 xib 文件的树应该是这样的:
您的应用代理 窗口 导航控制器 导航栏 和你的 rootviewcontroller【讨论】:
以上是关于UINavigationController 没有推送/显示视图的主要内容,如果未能解决你的问题,请参考以下文章
如果 UINavigationController 在第一个故事板中,有没有办法在第二个故事板中显示 UINavigationController?
UIViewController 呈现 UINavigationController - 没有导航栏?