娱乐大咖项目2- 总结

2.1 - 设置导航栏

2.1.2 - 封装UIBarButtonItem的,通过其分类来创建一个类方法,以快速设置导航栏上的Item

+(instancetype)itemWithImage:(NSString *)image highimage:(NSString *)highimage target:(id)target action:(SEL)action
{
    UIButton *Btn = [[UIButton alloc]init];
    [Btn setBackgroundImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
    [Btn setBackgroundImage:[UIImage imageNamed:highimage] forState:UIControlStateHighlighted];
    [Btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    
    Btn.size = Btn.currentBackgroundImage.size;
    
    return [[self alloc]initWithCustomView:Btn];
}

 

2.2 - 自定义导航栏控制器,要改变当控制器被push时,返回键为自定义返回键

/**
 * 可以在这个方法中拦截所有push进来的控制器
 */
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    
    if (self.childViewControllers.count > 0) {// 如果push进来的不是第一个控制器
        UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [backBtn setTitle:@"返回" forState:UIControlStateNormal];
        [backBtn setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
        [backBtn setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];
        backBtn.size = CGSizeMake(70, 30);
        // 让按钮内部的所有内容左对齐
        backBtn.contentEdgeInsets = UIEdgeInsetsMake(0, -50, 0, 0);
        [backBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [backBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
        
        [backBtn addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
        
        viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backBtn];
        // 隐藏tabbar
        viewController.hidesBottomBarWhenPushed = YES;
    }
    // 这句super的push要放在后面,让view controller可以覆盖在上面leftbarbuttonitem
    [super pushViewController:viewController animated:animated];
    
}

为了实现当有push进来一个新的控制器进来时,返回键不是系统自定义的蓝色控制器,就得在自定义导航控制器中重写push的方法,以此来达到拦截Push的过程。

 

2.2.2 - 设置导航栏的背景色,该项目采用的是图片

/**
 * 当第一次使用这个类的时候会调用一次
 */
+ (void)initialize
{
    // 当导航栏用在XMGNavigationController中, appearance设置才会生效
    //    UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:[self class], nil];
    // 视情况而定
    UINavigationBar *bar = [UINavigationBar appearance];
    [bar setBackgroundImage:[UIImage imageNamed:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault];
}

在这里面设置的原因,是因为如果在viewDidload中写的话,就会调用四次,而这里面写就自会调用一次,优化性能。

 

posted @ 2016-03-07 09:53  爆发的小子弹  阅读(356)  评论(0编辑  收藏  举报