我是否需要某种形式的导航控制器来导航视图?

时间:2013-05-23 19:10:35

标签: ios objective-c

我正在使用tableView和几个详细信息页面构建应用。我从masterViewController模板开始,但发现我想要自定义tableView布局,因此我删除了navigationController并添加了viewController tableView内。一切都很好,除了我无法摆脱detailView的事实。我使用detailView按钮在cancel的顶部添加了导航栏,但[self.navigationController popToRootViewControllerAnimated:YES];无效(我猜是因为没有导航控件)。我也尝试过使用popToViewController方法,但无法使用它。

我的问题是:为了能够“弹出”视图,我该怎么办?我假设当我从tableViewdetailView经过segue时,视图被推到某处,所以我该如何回去?我是否必须使用某种形式的navigationController

任何方向或帮助都会很棒!

3 个答案:

答案 0 :(得分:1)

简短回答:是的

不要删除导航控制器,否则你将无法弹出和推送视图(你仍然可以使用模态转换)

所有导航控制器确实是,是一个viewControllers数组的管理器。如果您查看self.navigationController.viewControllers属性,则可以访问导航链,并将其更改为NSMutableArray并进行更改并将其分配回来。仅供参考。

答案 1 :(得分:1)

根据我的说法,使用NavigationController将是一个不错的选择..

如果您使用的是NavigationController,则可以使用[self.navigationController popViewControllerAnimated:YES];代替popToRootViewController来弹出和推送

[self.navigationController pushViewControllerAnimated:YES];

如果您使用“观看次数”,则使用[self.view removeFromSuperview]删除整个视图,或删除所有使用此视图的视图:

for (UIView *view in [self.view subviews]) 
  {
     [view removeFromSuperview];
  }

希望这会有所帮助..

答案 2 :(得分:-1)

为了浏览您的应用,您的应用需要导航控制器,如果您在故事板中设置应用,则可以从右侧拖动导航控制器,然后将其链接到视图控制器。

你的弹出代码可能无法正常工作,因为你没有导航控制器,也就是self.navigationController是nil,

如果您主要使用代码制作应用程序,则可以分配导航控制器

UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController: masterViewController];

从那里你可以推送到其他页面或弹出到以前的页面

在故事板中向页面顶部添加导航栏不会为视图控制器提供导航功能,如果您想将ui导航栏设置为实际导航栏,它只是坐在那里的用户界面对象那么你可以在代码中设置它

[self.navigationController setNavigationBar:navigationBarProperty];

所以要回答你的问题,你需要一个导航控制器和故事板 - >导航控制器 - > tableView - > detailView应该做的伎俩