自定义tabbar(纯代码)
来源:互联网 发布:青蔓烟阁软件下载 编辑:程序博客网 时间:2024/05/06 06:52
纯代码写程序可维护性高。
两个类扩展。
UIView+Extension.h
UIView+Extension.h#import <UIKit/UIKit.h>@interface UIView (Extension)@property (nonatomic, assign) CGFloat x;@property (nonatomic, assign) CGFloat y;@property (nonatomic, assign) CGFloat centerX;@property (nonatomic, assign) CGFloat centerY;@property (nonatomic, assign) CGFloat width;@property (nonatomic, assign) CGFloat height;@property (nonatomic, assign) CGSize size;@property (nonatomic, assign) CGPoint origin;@endUIView+Extension.h#import "UIView+Extension.h"@implementation UIView (Extension)- (void)setX:(CGFloat)x{ CGRect frame = self.frame; frame.origin.x = x; self.frame = frame;}- (void)setY:(CGFloat)y{ CGRect frame = self.frame; frame.origin.y = y; self.frame = frame;}- (CGFloat)x{ return self.frame.origin.x;}- (CGFloat)y{ return self.frame.origin.y;}- (void)setCenterX:(CGFloat)centerX{ CGPoint center = self.center; center.x = centerX; self.center = center;}- (CGFloat)centerX{ return self.center.x;}- (void)setCenterY:(CGFloat)centerY{ CGPoint center = self.center; center.y = centerY; self.center = center;}- (CGFloat)centerY{ return self.center.y;}- (void)setWidth:(CGFloat)width{ CGRect frame = self.frame; frame.size.width = width; self.frame = frame;}- (void)setHeight:(CGFloat)height{ CGRect frame = self.frame; frame.size.height = height; self.frame = frame;}- (CGFloat)height{ return self.frame.size.height;}- (CGFloat)width{ return self.frame.size.width;}- (void)setSize:(CGSize)size{ CGRect frame = self.frame; frame.size = size; self.frame = frame;}- (CGSize)size{ return self.frame.size;}- (void)setOrigin:(CGPoint)origin{ CGRect frame = self.frame; frame.origin = origin; self.frame = frame;}- (CGPoint)origin{ return self.frame.origin;}@end
UIBarButtonItem+Extension.h
声明UIBarButtonItem+Extension.h #import <UIKit/UIKit.h> @interface UIBarButtonItem (Extension) + (UIBarButtonItem *)itemWithTarget:(id)target action:(SEL)action image:(NSString *)image highImage:(NSString *)highImage;@end 实现UIBarButtonItem+Extension.m #import "UIBarButtonItem+Extension.h"#import "Common.h"@implementation UIBarButtonItem (Extension)/** * UIBarButtonItem + Extension */+ (UIBarButtonItem *)itemWithTarget:(id)target action:(SEL)action image:(NSString *)image highImage:(NSString *)highImage{ UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [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; UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btn]; return barItem;}
@end
#import "AppDelegate.h"初始化窗口
#import "AppDelegate.h"#import "DSCustomTablebarViewController.h"@interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { DSCustomTablebarViewController *tabar = [[DSCustomTablebarViewController alloc] init]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.rootViewController = tabar; [self.window makeKeyAndVisible]; return YES;}
新建DSCustomTablebarViewController类继承于UIViewController
DSCustomTablebarViewController。h
import <UIKit/UIKit.h> @interface DSCustomTablebarViewController : UIViewController @end
DSCustomTablebarViewController.m
#import "DSCustomTablebarViewController.h"#import "DSTabbarItemView.h"#import "SportsViewController.h"#import "SleepViewController.h"#import "StasticViewController.h"#import "SettingViewController.h"#import "Common.h"#define BarItemWidth MAINVIEWWIDTH/4#define BarItemHeight 49@interface DSCustomTablebarViewController ()<DSTabbarItemViewDelegate>{ DSTabbarItemView *_sportView; DSTabbarItemView *_sleepView; DSTabbarItemView *_stasticView; DSTabbarItemView *_settingView; NSInteger index; }@property (nonatomic, strong)SportsViewController *sports;@property (nonatomic, strong)SleepViewController *sleep;@property (nonatomic, strong)StasticViewController *stastic;@property (nonatomic, strong)SettingViewController *setting;@property (nonatomic, strong)NSMutableArray *baritemViewArray; @end @implementation DSCustomTablebarViewController-(NSMutableArray *)baritemViewArray{ if (!_baritemViewArray) { _baritemViewArray = [[NSMutableArray alloc] initWithCapacity:0]; } return _baritemViewArray;}- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [self creatTabbar]; _sports = [[SportsViewController alloc] init]; _sleep = [[SleepViewController alloc] init]; _stastic = [[StasticViewController alloc] init]; _setting = [[SettingViewController alloc] init]; [self addChildViewController:_sports]; [self addChildViewController:_sleep]; [self addChildViewController:_stastic]; [self addChildViewController:_setting]; //[self.view addSubview:self.sports.view]; }#pragma mark -- DSTabBarItemViewDelegate-(void)didSelectedTabbarItem:(DSTabbarItemView *)tabbarItemView{ index = [self.baritemViewArray indexOfObject:tabbarItemView]; [self removeItemViewWithIndex:index]; for (DSTabbarItemView *itemView in self.baritemViewArray) { if (itemView == tabbarItemView) { itemView.selected = YES; }else{ itemView.selected = NO; } }}-(void)creatTabbar{ UIView *botomView = [[UIView alloc] init]; //botomView.backgroundColor = [UIColor purpleColor]; botomView.frame = CGRectMake(0, MAINVIEWHEIGHT - BarItemHeight, MAINVIEWWIDTH, BarItemHeight); _sportView = [DSTabbarItemView creatTabbarWithTitleName:@"运动" WithImage:@"01"]; _sportView.frame = CGRectMake(0,0, BarItemWidth, BarItemHeight); _sportView.delegate = self; _sleepView = [DSTabbarItemView creatTabbarWithTitleName:@"睡眠" WithImage:@"02"]; _sleepView.frame = CGRectMake(BarItemWidth, 0, BarItemWidth, BarItemHeight); _sleepView.delegate = self; _stasticView = [DSTabbarItemView creatTabbarWithTitleName:@"统计" WithImage:@"03"]; _stasticView.frame = CGRectMake(BarItemWidth * 2,0, BarItemWidth, BarItemHeight); _stasticView.delegate = self; _settingView = [DSTabbarItemView creatTabbarWithTitleName:@"设置" WithImage:@"04"]; _settingView.frame = CGRectMake(BarItemWidth * 3, 0, BarItemWidth, BarItemHeight); _settingView.delegate = self; [botomView addSubview:_sportView]; [botomView addSubview:_sleepView]; [botomView addSubview:_stasticView]; [botomView addSubview:_settingView]; [self.view addSubview:botomView]; [self.baritemViewArray addObjectsFromArray:@[_sportView,_sleepView,_stasticView,_settingView]];}-(void)removeItemViewWithIndex:(NSInteger)index{ switch (index) { case 0: [self.view addSubview:self.sports.view ]; [self.sleep.view removeFromSuperview]; [self.stastic.view removeFromSuperview]; [self.setting.view removeFromSuperview]; break; case 1: [self.view addSubview:self.sleep.view ]; [self.sports.view removeFromSuperview]; [self.stastic.view removeFromSuperview]; [self.setting.view removeFromSuperview]; break; case 2: [self.view addSubview:self.stastic.view ]; [self.sleep.view removeFromSuperview]; [self.sports.view removeFromSuperview]; [self.setting.view removeFromSuperview]; break; case 3: [self.view addSubview:self.setting.view ]; [self.sleep.view removeFromSuperview]; [self.stastic.view removeFromSuperview]; [self.sports.view removeFromSuperview]; break; default: break; } } @end
自定义tabbar继承于UIView
DSTabbarItemView。h
DSTabbarItemView.h #import <UIKit/UIKit.h>@class DSTabbarItemView;@protocol DSTabbarItemViewDelegate <NSObject> -(void)didSelectedTabbarItem:(DSTabbarItemView *)tabbarItemView;@end @interface DSTabbarItemView : UIView@property (nonatomic, strong)id<DSTabbarItemViewDelegate>delegate;@property (nonatomic, assign,getter=isSelected)BOOL selected;+(DSTabbarItemView *)creatTabbarWithTitleName:(NSString *)title WithImage:(NSString *)image;@end DSTabbarItemView.m #import "DSTabbarItemView.h"#import "UIView+Extension.h"@interface DSTabbarItemView() { //小图 UIImageView *_iconImageView; //背景图 UIImageView *_backgroundImageView; //标签 UILabel *_label; }@end @implementation DSTabbarItemView-(instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { UIImageView *backgroundImageView = [[UIImageView alloc] init]; _backgroundImageView = backgroundImageView; [self addSubview:backgroundImageView]; UIImageView *iconImageView = [[UIImageView alloc] init]; _iconImageView = iconImageView; [_backgroundImageView addSubview:iconImageView]; UILabel *lalbel = [[UILabel alloc] init]; lalbel.textAlignment = NSTextAlignmentCenter; lalbel.textColor = [UIColor whiteColor]; lalbel.font = [UIFont systemFontOfSize:12]; _label =lalbel; [_backgroundImageView addSubview:lalbel]; } return self;}-(void)layoutSubviews{ _backgroundImageView.frame = self.bounds; CGFloat iconX = self.width/2 - 13; CGFloat iconY = 1; CGFloat iconWH = 26; _iconImageView.frame = CGRectMake(iconX, iconY, iconWH, iconWH); CGFloat labelX = 0; CGFloat labelY = CGRectGetMaxY(_iconImageView.frame); CGFloat labelW = self.width; CGFloat labelH = self.height - _iconImageView.height; _label.frame = CGRectMake(labelX, labelY, labelW, labelH); }- (instancetype)initWithTitle:(NSString *)title WithIconImage:(NSString *)iconImage{ if (self == [super init]) { _label.text = title; _iconImageView.image = [UIImage imageNamed:iconImage]; _backgroundImageView.image = [UIImage imageNamed:@"backTab"]; } return self; }+(DSTabbarItemView *)creatTabbarWithTitleName:(NSString *)title WithImage:(NSString *)image{ return [[self alloc] initWithTitle:title WithIconImage:image];}-(void)setSelected:(BOOL)selected{ _selected = selected; if (self.isSelected == YES) { _backgroundImageView.image = [UIImage imageNamed:@"selectedTab"]; }else{ _backgroundImageView.image = [UIImage imageNamed:@"backTab"]; }}-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{ [self.delegate didSelectedTabbarItem:self];}@end
另外还需要添加四个控制器,控制器的view的frame需要留出49个像素。
SportsViewController
SleepViewController
StasticViewController
SettingViewController
0 0
- 自定义tabbar(纯代码)
- 纯代码构建tabbar
- 纯代码定义一个标准的tabBar
- Swift初探之纯代码写tabBar
- 纯代码创建中部凸起的Tabbar
- 纯代码自定义UITableViewCell
- 利用系统自带的UITabBarController纯代码搭建TabBar
- 纯代码自定义radiobutton样式
- 使用纯代码自定义cell
- 自定义TabBar
- 自定义TabBar
- 自定义Tabbar
- 自定义tabbar
- 自定义tabbar
- 自定义 TabBar
- 自定义TabBar
- 自定义tabBar
- 自定义TabBar
- 【已解决】找不到android.support.v7.internal.app.WindowDecorActionbar
- callBackName cannot be found&fullPathForFilename: No file found at replay.png. 解决方案
- 优化Myeclipse启动速度
- 小C公众帮 获取微信公众号粉丝openid
- 恭贺新春,猴年大吉!
- 自定义tabbar(纯代码)
- fedora 23问题、fedoa 22 virtualbox 5.0安装
- ZOJ 1025:Wooden Sticks
- 继续挖坑之 NW.js (一) 介绍
- linux find 排除某目录或文件 执行
- Linux使用dd命令快速生成大文件
- MyEclipse 2015优化技巧
- ZwCreateFile
- wiki/Cg Programming/Unity_shder/Minimal Shader