1. 导航控制器的子控制器
普通的视图都是多界面的视图,所有我们要使用UINavigationController
和UITabBarController
这两个多控制器来管理, 我们今天要讲的一下UINavigationController
,
示例代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 创建导航控制器的根控制器
ViewController *vc = [[ViewController alloc] init];
// 创建导航控制器
// 导航控制器也是需要有根控制器
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
// 导航控制器的根控制器,其实就是导航控制器的第一个子控制器
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
return YES;
}
在我们日常开发中,控制器v1做为导航控制器的根控制器, 我们在子控制器vc1中push到子控制器v2的时候, 我们的导航控制器有一个viewControllers
一个数组属性,用于保存我们的子控制器v1, v2. 这个时候v2是栈顶控制器,显示v2的view, 这是的控制器v1的视图将从导航控制移除(不移除会增加cpu的性能),但是并没有销毁. 因为控制器在viewControllers的数组里面.
1.1 UINavigationController
以栈的形式保存子控制器
@property(nonatomic,copy)NSArray*viewControllers;
@property(nonatomic,readonly)NSArray*childViewControllers;
1.2 使用push方法能将某个控制器压入栈
-(void)pushViewController:(UIViewController*)viewController animated:(BOOL)animated;
1.3 使用pop方法可以移除控制器
将栈顶的控制器移除
-(UIViewController*)popViewControllerAnimated:(BOOL)animated;
回到指定的子控制器
-(NSArray*)popToViewController:(UIViewController*)viewController animated:(BOOL)animated;
回到根控制器(栈底控制器)
-(NSArray*)popToRootViewControllerAnimated:(BOOL)animated;
2. 导航栏
记住!!!: 导航栏的内容由栈顶控制器的navigationItem属性决定
原因是:我们的导航控制器就一个, 只要根据不同的视图要显示的内容不同而显示不同就可以了.
左上角的返回按钮
@property(nonatomic,retain)UIBarButtonItem*backBarButtonItem;
中间的标题视图
@property(nonatomic,retain)UIView *titleView;
中间的标题文字
@property(nonatomic,copy) NSString *title;
左上角的视图
@property(nonatomic,retain)UIBarButtonItem*leftBarButtonItem;
UIBarButtonItem*rightBarButtonItem 右上角的视图
@property(nonatomic,retain)UIBarButtonItem*rightBarButtonItem;
3. 注意点
1. 在iOS7之后,系统默认会把导航条上的图片渲染成蓝色.
// 如何不渲染图片,告诉系统我这个图片不要渲染
// 1.通过代码
// 2.通过images.xcassets
**2. 导航条上按钮尺寸可以由自己决定 导航条上的内容位置由系统决定 **
// 创建一个按钮
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setBackgroundImage:image forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"navigationbar_friendsearch_highlighted"] forState:UIControlStateHighlighted];
btn.frame = CGRectMake(2000, 0, 35, 35);
// 导航条的内容显示两张图片
UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithCustomView:btn];
self.navigationItem.leftBarButtonItem = item1;
** // UINavigationItem UIBarButtonItem
// UINavigationItem:决定导航条的内容,(左边,中间,右边)
// UIBarButtonItem:决定导航条上按钮的内容
**
网友评论