码迷,mamicode.com
首页 > 其他好文 > 详细

项目总结

时间:2015-03-18 12:05:07      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

自定义导航栏

 

- (void)addTabBarButtonWithNormalImageName:(NSString *)norName andDisableImageName:(NSString *)disName

{

    // 3.1创建按钮

    LKTabBarBtn *btn = [[LKTabBarBtn alloc] init];

    // 3.2设置按钮上显示的图片

    // 3.2.1设置默认状态图片

    [btn setBackgroundImage:[UIImage imageNamed:norName] forState:UIControlStateNormal];

    

    // 3.2.2设置不可用状态图片

    [btn setBackgroundImage:[UIImage imageNamed:disName] forState:UIControlStateDisabled];

    

    // 3.4添加按钮到自定义TabBar

    [self addSubview:btn];

    

    // 3.5监听按钮点击事件

    [btn addTarget:self action:@selector(btnOnClick:) forControlEvents:UIControlEventTouchDown];

    

    // 3.6设置默认选中按钮

    if (1 == self.subviews.count) {

        [self btnOnClick:btn];

    }

    

    // 3.7设置按钮高亮状态不调整图片

    btn.adjustsImageWhenHighlighted = NO;

//    3.8设置tag

   

}

-(void)layoutSubviews

{

    

 

    //    注意这是必须要写的不然会出现不可预知的错误

//    [super layoutSubviews];

    NSLog(@"self.subviews.count = %lu",(unsigned long)self.subviews.count);

 

    for (int i = 0; i < self.subviews.count ; i++) {

//        NSLog(@"self.subviews.count = %lu",(unsigned long)self.subviews.count);

        

        UIButton *btn = self.subviews[i];

        

        // 3.3设置frame

        //  NSLog(@"initWithFrame %@", NSStringFromCGRect(self.frame));

        

        CGFloat btnY = 0;

        CGFloat btnW = self.frame.size.width / 5;

        CGFloat btnH = self.frame.size.height;

        CGFloat btnX = i * btnW;

        btn.frame = CGRectMake(btnX, btnY, btnW, btnH);

         btn.tag = i;

    }

    

}

 

-(void)btnOnClick:(LKTabBarBtn * )btn

{

//    NSLog(@"按钮被点击了 = %ld",(long)btn.tag);

    if ([self.delegate respondsToSelector:@selector(tarBarDidSelectBtnFrom:to:)]) {

        [self.delegate tarBarDidSelectBtnFrom:self.selectBtn.tag to:btn.tag];

        

    }

    

    //    0.取消上一次选中的按钮

    //    self.selectBtn.selected = NO;

    self.selectBtn.enabled = YES;

    //    1.设置当前的点击的按钮的选中状态

    btn.enabled = NO;

    //    2.记录当前的按钮

    self.selectBtn = btn;

    //    3.切换控制器

   

}

 

数据的传递通过代理

 

@protocol LKTabBarDelegate <NSObject>

 

-(void)tarBarDidSelectBtnFrom:(NSInteger)from to:(NSInteger)to;

 

@end

 

@interface LKTabBar : UIView

 

@property (nonatomic, weak) id<LKTabBarDelegate> delegate;

- (void)addTabBarButtonWithNormalImageName:(NSString *)norName andDisableImageName:(NSString *)disName;

 

@end

 

 

控制器操作

 

 

    //    1.新建一个tabBar

    LKTabBar * myTabBar = [[LKTabBar alloc]init];

    //    myTabBar.backgroundColor = [UIColor redColor];

    myTabBar.frame = self.tabBar.bounds;

    //    设置代理事件

    myTabBar.delegate = self;

    [self.tabBar addSubview:myTabBar];

    for (int i = 0; i < self.viewControllers.count; i++) {

        // 通知自定义TabBar创建按钮

        NSString *norImageName = [NSString stringWithFormat:@"TabBar%d", i + 1];

        NSString *disableImageName = [NSString stringWithFormat:@"TabBar%dSel", i + 1];

        // 只要调用自定义TabBar的该方法就会创建一个按钮

        [myTabBar addTabBarButtonWithNormalImageName:norImageName andDisableImageName:disableImageName];

 

 

控制器的跳转

 

-(void)tarBarDidSelectBtnFrom:(NSInteger)from to:(NSInteger)to

{

    self.selectedIndex = to;

    NSLog(@"to = %ld",(long)to);

}

 

 

 

巧妙的使用父类

 

//只是调用一次

+(void)initialize

{

    //    NSLog(@"initialize");

    // 1.设置导航条的主题

    // 如果要同时设置很多UINavigationBar的样式, 可以通过设置UINavigationBar的主题的方式来设置以便简化代码

    UINavigationBar *navBar = [UINavigationBar appearance];

    // 1.1设置所有导航条的背景图片

    // 判断当前运行的操作系统的版本

    if ([[UIDevice currentDevice].systemVersion doubleValue] > 7.0) {

        [navBar setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];

    }else

    {

        [navBar setBackgroundImage:[UIImage imageNamed:@"NavBar"] forBarMetrics:UIBarMetricsDefault];

    }

    

    // 设置导航条上返回按钮和图片的颜色

    [navBar setTintColor:[UIColor whiteColor]];

    

    // 1.2设置所有导航条的标题颜色

    NSMutableDictionary *md = [NSMutableDictionary dictionary];

    md[NSFontAttributeName] = [UIFont systemFontOfSize:16];

    md[NSForegroundColorAttributeName] = [UIColor whiteColor];

    [navBar setTitleTextAttributes:md];

    

    // 1.3设置UIBarButtonItem的主题

    UIBarButtonItem *barItem = [UIBarButtonItem appearance];

    

    // 判断是否是IOS6 如果是IOS6就设置图片

    if (!([[UIDevice currentDevice].systemVersion doubleValue] > 7.0)) {

        // 设置普通按钮的图片

        UIImage *norImage = [UIImage imageNamed:@"NavButton"];

        [barItem setBackgroundImage:norImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

        UIImage *higImage = [UIImage imageNamed:@"NavButtonPressed"];

        [barItem setBackgroundImage:higImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

        //  设置返回按钮的图片

        UIImage *norBackImage = [UIImage imageNamed:@"NavBackButton"];

        [barItem setBackButtonBackgroundImage:norBackImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

        

        UIImage *higBackImage = [UIImage imageNamed:@"NavBackButtonPressed"];

        [barItem setBackButtonBackgroundImage:higBackImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

        

    }else

    {

        // 是IOS7

        NSMutableDictionary *barMd = [NSMutableDictionary dictionary];

        barMd[NSFontAttributeName] = [UIFont systemFontOfSize:16];

        barMd[NSForegroundColorAttributeName] = [UIColor whiteColor];

        [barItem setTitleTextAttributes:barMd forState:UIControlStateNormal];

        

    }

    

}

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{

//    // 拿到目标控制器(即将要入栈的控制器), 设置它的自动隐藏tabbar

//    viewController.hidesBottomBarWhenPushed = YES;

//    [super pushViewController:viewController animated:animated];

//    拿到目标的控制器(即将要入栈的控制器),设置它的自动隐藏的tabBar

    viewController.hidesBottomBarWhenPushed = YES;

    [super pushViewController:viewController animated:YES];

 

}



项目总结

标签:

原文地址:http://www.cnblogs.com/LennyKwok/p/4346644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!