iOS 自定义tabBarController

//

//  TabBar.m

//  TabBarDemo

//

//  Created by LeeYunHeNB on 14-10-10.

//  Copyright (c) 2014 XinMaHuTong. All rights reserved.

//


#import "TabBar.h"


#import "TabBarBase.h"

@interface TabBar ()

{

    UIButton *btn;

}

@property (nonatomic,strong)UIButton *selectedBtn;

@end


@implementation TabBar


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        // Custom initialization

    }

    return self;

}


- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

}

-(void)viewWillLayoutSubviews

{

    self.tabBarController.tabBar.hidden = NO; //隐藏原先的tabBar

    

    CGFloat tabBarViewY = self.view.frame.size.height - 49;

    UIView *  _tabBarView = [[UIView alloc] initWithFrame:CGRectMake(0, tabBarViewY, 320, 49)];

    //view 相关设置在这里

    [_tabBarView setBackgroundColor:[UIColor grayColor]];

    [self.view addSubview:_tabBarView];

    for (int i = 0; i < 2; i++) {

        btn = [[UIButton alloc] init];

        

        //给按钮添加图片 没有 图片就没加

        //        NSString *imageName = [NSString stringWithFormat:@"TabBar%d", i ];

        //        NSString *imageNameSel = [NSString stringWithFormat:@"TabBar%dSel", i ];

        //        [btn setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];

        //        [btn setImage:[UIImage imageNamed:imageNameSel] forState:UIControlStateSelected];

        //        [btn setBackgroundColor:[UIColor greenColor]];

        if (i==1) {

            [btn setTitle:@"草帽一" forState:UIControlStateNormal];

            [btn setTitleColor:[UIColor redColor] forState:UIControlStateSelected];

        }

        

        if (i==0) {

            [btn setTitle:@"草帽二" forState:UIControlStateNormal];

            [btn setTitleColor:[UIColor redColor] forState:UIControlStateSelected];

        }

        CGFloat x = i * _tabBarView.frame.size.width / 2;

        btn.frame = CGRectMake(x, 0, _tabBarView.frame.size.width / 2, _tabBarView.frame.size.height);

        [_tabBarView addSubview:btn];

        //设置刚进入时,第一个按钮为选中状态

        if (0 == i) {

            btn.selected = YES;

            self.selectedBtn = btn//设置该按钮为选中的按钮

        }

        btn.tag = i;//设置按钮的标记, 方便来索引当前的按钮,并跳转到相应的视图

        //添加 按钮点击事件

        [btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];

    }

}

-(void)clickBtn:(UIButton *)sender

{

    if (sender.tag == 0) {

        self.selectedIndex = 0;

    }

    if (sender.tag == 1) {

        self.selectedIndex = 1;

        

    }

    

    

    //1.先将之前选中的按钮设置为未选中

    self.selectedBtn.selected = NO;

    //2.再将当前按钮设置为选中

    

    sender.selected = YES;

    

    //3.最后把当前按钮赋值为之前选中的按钮

    self.selectedBtn = sender;

    

    //4.跳转到相应的视图控制器. (通过selectIndex参数来设置选中了那个控制器)

    

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


//- (void)tabBar:(TabBarBase *)tabBar selectedFrom:(NSInteger)from to:(NSInteger)to {

//    self.selectedIndex = to;

//}

///*

#pragma mark - Navigation


// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}



@end

demo下载路径
http://download.csdn.net/detail/u013682799/8020471

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
iOS自定义 TabBar 主要分为以下几个步骤: 1. 创建自定义 TabBar 创建一个继承于 UITabBar 的类,重写初始化方法和 layoutSubviews 方法,实现自定义 TabBar 的样式和布局。 2. 实现自定义 TabBarItem 创建一个继承于 UIButton 的类,用于实现自定义TabBarItem 样式,例如添加图片、文字等。 3. 设置自定义 TabBarItem 在自定义 TabBar 的初始化方法中,添加自定义TabBarItem,将其添加到 TabBar 上。 4. 替换系统 TabBar 在 AppDelegate 中,找到 TabBarControllertabBar 属性,将其替换为自定义TabBar。 示例代码: 自定义 TabBar 类: ``` class CustomTabBar: UITabBar { var items: [CustomTabBarItem] = [] override init(frame: CGRect) { super.init(frame: frame) setup() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setup() { // 隐藏默认的 TabBar self.tintColor = .clear self.backgroundImage = UIImage() self.shadowImage = UIImage() self.backgroundColor = .white } override func layoutSubviews() { super.layoutSubviews() // 设置自定义 TabBarItem 的布局 let itemWidth = self.frame.size.width / CGFloat(items.count) var itemIndex: CGFloat = 0 for item in items { item.frame = CGRect(x: itemWidth * itemIndex, y: 0, width: itemWidth, height: self.frame.size.height) itemIndex += 1 } } } ``` 自定义 TabBarItem 类: ``` class CustomTabBarItem: UIButton { var title: String? var normalImage: UIImage? var selectedImage: UIImage? override init(frame: CGRect) { super.init(frame: frame) setup() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setup() { // 设置 TabBarItem 的样式 self.imageView?.contentMode = .scaleAspectFit self.titleLabel?.font = UIFont.systemFont(ofSize: 12) self.setTitleColor(.gray, for: .normal) self.setTitleColor(.black, for: .selected) } override func layoutSubviews() { super.layoutSubviews() // 设置 TabBarItem 的布局 let imageHeight = self.frame.size.height * 0.6 self.imageView?.frame = CGRect(x: (self.frame.size.width - imageHeight) / 2, y: 5, width: imageHeight, height: imageHeight) self.titleLabel?.frame = CGRect(x: 0, y: self.frame.size.height - 20, width: self.frame.size.width, height: 20) } func set(title: String?, normalImage: UIImage?, selectedImage: UIImage?) { self.title = title self.normalImage = normalImage self.selectedImage = selectedImage // 设置 TabBarItem 的标题和图片 self.setTitle(title, for: .normal) self.setImage(normalImage, for: .normal) self.setImage(selectedImage, for: .selected) } } ``` 在自定义 TabBar 的初始化方法中,添加自定义TabBarItem: ``` class CustomTabBar: UITabBar { var items: [CustomTabBarItem] = [] override init(frame: CGRect) { super.init(frame: frame) setup() // 添加 TabBarItem let item1 = CustomTabBarItem() item1.set(title: "首页", normalImage: UIImage(named: "home_normal"), selectedImage: UIImage(named: "home_selected")) self.addSubview(item1) items.append(item1) let item2 = CustomTabBarItem() item2.set(title: "消息", normalImage: UIImage(named: "message_normal"), selectedImage: UIImage(named: "message_selected")) self.addSubview(item2) items.append(item2) let item3 = CustomTabBarItem() item3.set(title: "我的", normalImage: UIImage(named: "mine_normal"), selectedImage: UIImage(named: "mine_selected")) self.addSubview(item3) items.append(item3) } // ... } ``` 在 AppDelegate 中,找到 TabBarControllertabBar 属性,将其替换为自定义TabBar: ``` func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // ... let tabBarController = UITabBarController() tabBarController.viewControllers = [viewController1, viewController2, viewController3] // 替换为自定义 TabBar let customTabBar = CustomTabBar(frame: tabBarController.tabBar.frame) tabBarController.setValue(customTabBar, forKey: "tabBar") // ... return true } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值