您的位置:首页 > 其它

理解导航控制器

2015-08-19 13:21 197 查看
// 当window将导航控制器作为根视图控制器的时候
// 1.   window — > 导航控制器view
// 2.   window - > 导航控制器导航条view
// 3.   //    UIView *view = viewController.view;
//    [self.window addSubview:view];

// 小结系统导航控制器的实现机理

//@property们

// 1. 要导航的控制器们      NSArray  *viewControllers;
// 2. 导航条              UIView   *navBar;
// 3. 自带视图            UIView    *navView;

// method们

// 1. push到一个控制器
/**
*  当selfpush到一个控制器中,
大概执行这几步操作
1. [viewControllers addObject:新控制器的实例对象]
2. [self.navView addSubview:新控制器的视图]
3.  导航条需要bringToFront移到当期控制器的最上层

*/
// 2. pop 到一个控制器
/**
*  大概执行这几步操作
1. [当期控制器的视图  removeFromSuperView];
2. [viewControllers remove需要移除的控制器对象];
3. 导航条还是需要bringToFront移到当期控制器的最上层

*/
// 3. 设置根视图控制器
// 其实就是push的过程,只不过这个时候数组里面没有对象,根视图控制器作为第一个导航控制器管理的视图控制器
// 1.   创建window对象     保证将视图显示到屏幕上
// 2.   保证window对象     makeKeyAndVisible
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];

// 3.   添加需要显示出来的视图
//    UIButton  *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
//    UIView    *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)];
//    view.backgroundColor = [UIColor yellowColor];
//    [self.window addSubview:button];
//    [self.window addSubview:view];

/*
// 视图控制器
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor lightGrayColor];
//    [self.window addSubview:viewController.view];
self.window.rootViewController = viewController;
*/

/**
1. 想要导航控制器去管理多个视图
UIViewController 交给他去管理

导航控制器是如何管理视图控制器的

*/

/*
UIViewController *vc =  [[UIViewController alloc] init];

vc.view.backgroundColor = [UIColor redColor];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc];
// 栈就是一个数组
navController.view.backgroundColor = [UIColor greenColor];
NSLog(@"count = %ld",navController.viewControllers.count);

// 存入数组中
//    [navController pushViewController:vc animated:YES];

self.window.rootViewController = navController;

*/

YXFirstViewController *firstVC = [[YXFirstViewController alloc] init];
firstVC.view.backgroundColor = [UIColor yellowColor];
YXSecondViewController *secondVC = [[YXSecondViewController alloc] init];
secondVC.view.backgroundColor = [UIColor blueColor];

UINavigationController *nav = [[UINavigationController alloc] init];

//    NSLog(@" ---  %@",nav);
//    NSLog(@" --- %@",firstVC);
//    NSLog(@" --- %@",secondVC);
[nav pushViewController:firstVC animated:NO];
//    nil
// if array.count  == 0 animated == no
// nsarray 0  + 1
//     root view controller
[nav pushViewController:secondVC animated:YES];

[nav pushViewController:[[UIViewController alloc] init]animated: NO];
[nav pushViewController:[[UIViewController alloc]  init] animated:NO];

NSLog(@"%ld",nav.viewControllers.count); // 2

self.window.rootViewController = nav;
//    NSLog(@"%ld",nav.viewControllers.count);

// 视图显示的起点 ,专门用来将视图绘制到屏幕上
/**
UIScreen - > UIWindow(继承自UIView) - > UIView
*/

//    UIButton *button = [[UIButton alloc] init];
//    [button addTarget:self action:@selector(btnTouch) forControlEvents:UIControlEventTouchUpInside];

return YES;
}
//- (void)setRootViewController:(UIViewController *)viewController {
//    UIView *view = viewController.view;
//    [self.window addSubview:view];
//}

- (void)pushViewController:(UIViewController *)viewController {
// 将导航控制器保存到自己的属性
//    viewController.navigationController = self;
//
//    [self.viewControllers addobject:viewController];
//    [self.view addsubView:viewController.view];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: