修改導航欄上的背景和字體顏色
移除系統tabbar上的按鈕
按鈕的選中與取消
界面搭建一般都是三級控制器,標簽控制器-->導航控制器-->視圖控制器
這里,因為每個標簽項管理的視圖有的是一樣的,所以我們可以用繼承的辦法
以阿里星球項目為例, 其他控制器都繼承BaseViewController,一些相同的內容都寫在這里
@interface DynamicViewController : BaseViewController
修改導航欄上的背景
//1.設置導航欄的背景圖片
[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav_bg"] forBarMetrics:UIBarMetricsDefault];
//2.設置導航欄標題的字體顏色
NSDictionary *dic = @{NSForegroundColorAttributeName:[UIColor whiteColor],
NSFontAttributeName:[UIFont systemFontOfSize:16]};
[self.navigationBar setTitleTextAttributes:dic];
移除系統tabbar上的按鈕
/**
* 自定義TabbarController
1.設置tabbarController 的viewControllers
2.移除系統的按鈕和tabbar
3.創建 自定義的tabbar
*/
@implementation AliTabbarController
- (void)viewDidLoad {
[super viewDidLoad];
//1.設置tabbarController 的viewControllers
[self creatViewControllers];
//2.移除系統自帶的tabbar的子視圖
[self removeSystemTabbarSubviews];
//3.自定義tabbar 上控件
[self creatSubViews];
}
#pragma mark - 1.設置viewController
-(void)creatViewControllers {
//1.創建視圖控制器
DynamicViewController *dynamic = [[DynamicViewController alloc] init];
DIscoverViewController *discover = [[DIscoverViewController alloc] init];
MessageViewController *message = [[MessageViewController alloc] init];
MineViewController *mine = [[MineViewController alloc] init];
//2.給每一個視圖控制器添加導航控制器
NSArray *controllers = @[dynamic,discover,message,mine];
NSMutableArray *navis = [[NSMutableArray alloc] initWithCapacity:4];
for (UIViewController *viewController in controllers) {
//創建導航控制器
BaseNavigationController *navigation = [[BaseNavigationController alloc] initWithRootViewController:viewController];
[navis addObject:navigation];
}
self.viewControllers = navis;
}
#pragma mark - 2.移除系統自帶的tabbar的子視圖
-(void)removeSystemTabbarSubviews {
for (UIView *view in self.tabBar.subviews) {
NSLog(@"%@",view);
//判斷子視圖 是否屬于這類 UITabBarButton
//1.[類名 class] 得出這個類
//2.NSClassFromString(NSString) 使用字符串轉換得出一個類
if ([view isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
[view removeFromSuperview];
}
}
}
#pragma mark - 3.自定義tabbar子視圖
-(void)creatSubViews {
//1.創建tabbar背景圖片視圖
UIImageView *bjImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenW, kTabbar)];
bjImageView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tabBarViewBg"]];
[self.tabBar addSubview:bjImageView];
CGFloat itemWidth = kScreenW / 4.0;
NSArray *imageNames = @[@"trends",@"find",@"message",@"my"];
//2.創建四個按鈕
for (int i = 0; i <self.viewControllers.count; i++) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
//設置按鈕frame
button.frame = CGRectMake(i * itemWidth, 0, itemWidth, kTabbar);
//設置圖片
NSString *imageNormal = [NSString stringWithFormat:@"trends_%@_normal",imageNames[i]];
NSString *imageSelected = [NSString stringWithFormat:@"trends_%@_click",imageNames[i]];
[button setImage:[UIImage imageNamed:imageNormal] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:imageSelected] forState:UIControlStateSelected];
button.tag = 1000 + i;
//設置第一個按鈕為選中狀態
if (button.tag == 1000) {
button.selected = YES;
}
[button addTarget:self
action:@selector(clickBtn:)
forControlEvents:UIControlEventTouchUpInside];
[self.tabBar addSubview:button];
}
}
-(void)clickBtn:(UIButton *)sender {
NSInteger index = sender.tag - 1000;
//1.切換視圖控制器
self.selectedIndex = index;
//2.修改按鈕的旋鈕的選中狀態
for (int i = 0; i < self.viewControllers.count; i++) {
UIButton *btn = (UIButton *)[self.tabBar viewWithTag:1000 + i];
btn.selected = NO;
}
sender.selected = !sender.selected;
}