美文网首页
06Nav导航控制器的总结

06Nav导航控制器的总结

作者: i爱吃土豆的猫 | 来源:发表于2021-04-18 14:55 被阅读0次

1. 导航控制器的子控制器

普通的视图都是多界面的视图,所有我们要使用UINavigationControllerUITabBarController这两个多控制器来管理, 我们今天要讲的一下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:决定导航条上按钮的内容
**

相关文章

网友评论

      本文标题:06Nav导航控制器的总结

      本文链接:https://www.haomeiwen.com/subject/cqgisttx.html