[UINavigationController setView] 和 [UINavigationController setViewControllers] 的区别
Posted
技术标签:
【中文标题】[UINavigationController setView] 和 [UINavigationController setViewControllers] 的区别【英文标题】:Difference between [UINavigationController setView] and [UINavigationController setViewControllers] 【发布时间】:2014-07-17 08:55:35 【问题描述】:我有一个方法,它应该初始化导航控制器并为侧边菜单加载视图控制器。这一切都发生在未附加到任何其他导航控制器的视图控制器中。
- (void)showLeftNC
if (leftNavCon == nil)
leftNavCon = [[UINavigationController alloc] init];
[leftNavCon setViewControllers:@[lmvc] animated:NO];
//[leftNavCon setView:lmvc.view];
[leftNavCon.view setFrame:lmvc.view.frame];
[self.view addSubview:leftNavCon.view];
[self showCenterViewWithShadow:YES withOffset:-2];
[self.view sendSubviewToBack:leftNavCon.view];
leftNavCon 是导航控制器
lmvc 是主视图控制器
这种方式不起作用,当我调用 initWithRootViewController:lmvc 时也不行
仅当我使用注释的 [leftNavCon setView:lmvc.view] 时它才有效。但即便如此,我仍然无法让导航控制器推送任何其他视图控制器。
请帮忙。
【问题讨论】:
[leftNavCon setView:lmvc.view]
表示将 UINavigationController 的视图设置为 lmvc 的视图。我猜你运行代码后推送的 viewController 视图将位于 UINavigationController 的视图下方。你确定[leftNavCon setViewControllers:@[lmvc] animated:NO];
不起作用吗?我总是这样做。
它现在可以工作了,但是我使用视图控制器作为导航控制器的容器,因为它不能单独调用来 addSubView
【参考方案1】:
没关系,我解决了一些问题,我使用 lmvc 作为包含视图,初始化了导航控制器和我在其中需要的所有视图控制器
在 lmvc 的 initWithNibName 中
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
// Custom initialization
if (testViewController == nil)
testViewController = [[UIViewController alloc] init];
if (navCon == nil)
navCon = [[UINavigationController alloc] initWithRootViewController: testViewController];
view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 748)];
[self setView:navCon.view];
[testViewController.view addSubview:table];
[testViewController.view addSubview:button];
[testViewController.view addSubview:anyControlYouNeed];
然后是以后
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if (tableTwo == nil)
tabl = [[UITableView alloc] initWithFrame:table.frame];
if (testViewControllerTwo == nil)
testViewControllerTwo = [[UIViewController alloc] init];
tableTwo.delegate = self;
tableTwo.dataSource = self;
[testViewControllerTwo setView:tableTwo];
[navCon pushViewController: testViewControllerTwo animated:YES];
像魅力一样工作
【讨论】:
以上是关于[UINavigationController setView] 和 [UINavigationController setViewControllers] 的区别的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 和 UINavigationController 不适用于 iOS 4
翻转过渡 uinavigationcontroller push
UITabbarController 的“完成”按钮隐藏在 UINavigationController 后面
UINavigationController 不采用先例视图标题