iOS-自定义 UITabBarController

来源:互联网 发布:java float 精度 编辑:程序博客网 时间:2024/06/11 01:00
先来回顾一下UITabBarController
( 稍微详细的在在http://blog.csdn.net/yang198907/article/details/49807011)
伴随UITabBarController存在的一个控件叫做导航栏(UITabBar);
UITabBarController中有N个子控制器,那么在UITabBar中就会有N个UITabBarButton作为子控制器;

结构:


控制原理:1对应VC1,2对应VC2.....;



对应的UITabBarItem有相应的属性设置显示的内容,
eg:
标题文字
    @property(nonatomic,copy)NSString*title;
     图标
    @property(nonatomic,retain)UIImage*image;
     选中时的图标
    @property(nonatomic,retain)UIImage*selectedImage;
     提醒数字
    @property(nonatomic,copy)NSString*badgeValue
典型的QQ案例:


什么时候需要自定义UITabBar
UITabBarItem的默认功能显示不了我们的需求,或者说,我们想更加灵活的使用UITabBarItem的时候;
例如网易彩票:


注意⚠️:文字和房子为一张图片
此时再去使用默认的UITabBarItem的属性设置就会有问题!
自定义UITabBar就派上用场了!


怎么实现自定义UITabBar?
先分析一下UITabBar的功能,点击UITabBarItem则会跳转到对应的控制器;
所以,我们只需要自定义一个UIView或者子类,然后再添加Button,点击Button时再跳转到对应的控制器就就可以了!

废话少说,上点代码:(代码实现了点击底部的button切换控制器)
步骤一:自定义UITabBarController
     1)创建YSCTabBarController类继承自UITabBarController
     2)创建 YSCTabBar类继承自 UIView,并添加3个Button模拟UITabBarItem;
   3)创建三个控制器继承自UIViewController

代码1:

            #import "YSCTabBarController.h"            #import "YSCTabBar.h"            #import "OneViewController.h"            #import "TwoViewController.h"            #import "ThreeViewController.h"            @interface YSCTabBarController () <YSCTabBarDelegate>            @end            @implementation YSCTabBarController            - (void)viewDidLoad {                [super viewDidLoad];                [self loadViewVC];                YSCTabBar *tabBar = [[YSCTabBar alloc] initWithFrame:self.tabBar.frame WithCount:self.viewControllers.count];                tabBar.delegate = self;                [self.view addSubview:tabBar];            }            - (void)loadViewVC {                OneViewController *oneVC = [[OneViewController alloc] init];                TwoViewController *twoVC = [[TwoViewController alloc] init];                ThreeViewController *threeVC = [[ThreeViewController alloc] init];                self.viewControllers = @[oneVC,twoVC,threeVC];            }            - (void)yscTabbar:(YSCTabBar *)tabar index:(NSInteger)index {                self.selectedIndex = index;            }            @end




 代码2:

           #import "YSCTabBar.h"            @implementation YSCTabBar            - (instancetype)initWithFrame:(CGRect)frame WithCount:(NSInteger )count {                if (self = [super initWithFrame:frame]) {                    CGFloat W = [UIScreen mainScreen].bounds.size.width / count;                    CGFloat H = 49;                    for (int i = 0; i < count; i ++) {                        CGFloat X = i * W;                        UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(X, 0, W, H)];                        btn.tag = i;                        btn.backgroundColor = [UIColor colorWithRed:((float)arc4random_uniform(256) / 255.0) green:((float)arc4random_uniform(256) / 255.0) blue:((float)arc4random_uniform(256) / 255.0) alpha:1.0];                        [self addSubview:btn];                        [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];                    }                }                return self;            }            - (void)btnClick:(UIButton *)btn{                if ([self.delegate respondsToSelector:@selector(yscTabbar:index:)]) {                    [self.delegate yscTabbar:self index:btn.tag];                }            }            @end



      代码3、

            #import "OneViewController.h"            @interface OneViewController ()            @end            @implementation OneViewController            - (void)viewDidLoad {                [super viewDidLoad];                // Do any additional setup after loading the view.                self.view.backgroundColor = [UIColor redColor];            }            @end



步骤二
        代码创建实例化UIWindow并创建 YSCTabBarController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Override point for customization after application launch.    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];    YSCTabBarController *tabVC = [[YSCTabBarController alloc] init];    self.window.rootViewController = tabVC;    [self.window makeKeyAndVisible];    return YES;}


效果图:


总结:UITabBarController给我们提供了一个非常好的选择哪个控制的属性,否则,我们还需要根据不同的;
                         eg:
            - (void)yscTabbar:(YSCTabBar*)tabar index:(NSInteger)index {
               
self.selectedIndex= index;
            }
此外,子控件让父控件做一些事情的时候,可以通过代理或者block来实现,本demo使用的是代理的方式;


基于此,我们还可以写出创建YSCTabBar类继承自UIScrollView
实现如下效果:
 




0 0
原创粉丝点击