iOS_25_彩票骨架搭建+导航栏适配
来源:互联网 发布:淘宝店铺宝贝数量 编辑:程序博客网 时间:2024/05/20 04:46
最终效果图:
Main.storyboard
初始化的控制器是:导航控制器
它的根控制器是:TabBarController
TabBarController的底部是一个自定义的TabBar
里面添加了5个TabBarItem
点击每一个item,
会将tabBar上的对应item的子控制器的navigationItem的值,
转移(赋值,复制)给TabBarController的navigationItem,
从而显示在导航栏上,
因为TabBarController就是导航控制器的根控制器,也同时就是栈顶控制器,导航控制器只知道它的存在
//// BeyondTabBarController.m// 25_彩票//// Created by beyond on 14-8-27.// Copyright (c) 2014年 com.beyond. All rights reserved.//#import "BeyondTabBarController.h"#import "BeyondTabBar.h"#import "BeyondTabBarItem.h"#import "BeyondTabBarDelegate.h"@interface BeyondTabBarController ()<BeyondTabBarDelegate>@end@implementation BeyondTabBarController- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 1.釜底抽薪 直接删除默认的tabBar [self.tabBar removeFromSuperview]; // 2.创建tabbar BeyondTabBar *myTabBar = [[BeyondTabBar alloc] init]; // 占位原来的tabBar myTabBar.frame = self.tabBar.frame; // 代理设置后,可以接收tabBar内部按钮的点击状态切换 myTabBar.delegate = self; // 添加到当前控制器的view [self.view addSubview:myTabBar]; // 3.由于 图片名的规律性,一次性添加5个tabBarItem按钮 for (int i = 1; i<=5; i++) { NSString *normal = [NSString stringWithFormat:@"TabBar%d", i]; NSString *selected = [normal stringByAppendingString:@"Sel"]; // 调用tabBar开放出来的接口,向tabBar内部添加按钮,只要传参:图片名 [myTabBar addOneTabBarItem:normal selectedIconName:selected]; } });}#pragma mark - tabbar代理方法- (void)tabBar:(BeyondTabBarItem *)tabBar didSelectButtonFrom:(NSUInteger)from to:(NSUInteger)to{ // 1.直接通过索引 选中某个控制器(这个是UITabBarController自带的API) self.selectedIndex = to; UITableViewController *newVC = self.childViewControllers[to]; // 2.将tabBar上的对应按钮的子控制器的navigationItem值转移给TabBarController,因为导航控制器的根控制器就是TabBarController,导航控制器 只知道它的存在 [self.navigationItem copyFromItem:newVC.navigationItem];}@end
导航栏的适配
只需提供64高和44高的背景图片即可
//// BeyondNavigationController.m// 25_彩票//// Created by beyond on 14-8-27.// Copyright (c) 2014年 com.beyond. All rights reserved.//#import "BeyondNavigationController.h"@interface BeyondNavigationController ()@end@implementation BeyondNavigationController#pragma mark 一个类只会调用一次+ (void)initialize{ // 1.取出设置主题的对象 UINavigationBar *navBar = [UINavigationBar appearance]; UIBarButtonItem *barItem = [UIBarButtonItem appearance]; // 2.设置导航栏的背景图片 NSString *navBarBg = nil; // 判断iOS7 // [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 if (iOS7) { // 使用64高度的图片,做导航栏背景图片 navBarBg = @"NavBar64"; // 设置导航栏的渐变色为白色(iOS7中返回箭头的颜色变为这个颜色:白色) navBar.tintColor = [UIColor whiteColor]; } else { // 非iOS7,使用44高度的图片 navBarBg = @"NavBar"; // 黑色的顶部状态条 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; // 设置导航栏按钮的背景图片 [barItem setBgImgForNormal:@"NavButton" highlighted:@"NavButtonPressed"]; // 设置导航栏返回按钮的背景图片 [barItem setBackBtnBgImgForNormal:@"NavBackButton" highlighted:@"NavBackButtonPressed"]; } [navBar setBackgroundImage:[UIImage imageNamed:navBarBg] forBarMetrics:UIBarMetricsDefault]; // 3.设置导航栏标题颜色为白色 [navBar setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }]; // 4.设置导航栏按钮文字颜色为白色 [barItem setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont systemFontOfSize:13] } forState:UIControlStateNormal];}#pragma mark 控制状态栏的样式/* 状态栏的管理: 1> iOS7之前:UIApplication 2> iOS7开始:交给对应的控制器去管理 */- (UIStatusBarStyle)preferredStatusBarStyle{ // 白色样式 return UIStatusBarStyleLightContent;}@end
1 0
- iOS_25_彩票骨架搭建+导航栏适配
- iOS_25_彩票_控制器的view的适配
- iOS_25_彩票设置的cell的数据源模型的封装
- maven搭建项目骨架
- 彩票案例-导航栏控制
- 彩票案例-导航栏设置
- iOS_20_微博骨架搭建
- 分布式Restful SpringBoot骨架搭建
- 彩票案例-导航栏字体颜色改变
- ios--框架--微博骨架搭建
- 骨架搭建存放字体的空间
- java web手工搭建--基本骨架
- SpringBoot+Dubbo分布式SOA项目骨架搭建
- 快速搭建一个Express工程骨架
- 彩票
- 彩票
- 彩票
- 彩票
- 用url读取沙河路径,或要写入的方法
- 欧拉定理、费马小定理、逆元理论基础
- eclipse集成svn后出现Failed to load JavaHL Library的解决办法
- 录音的
- HDU1200 To and Fro
- iOS_25_彩票骨架搭建+导航栏适配
- Linux程序设计笔记(第4章 Linux环境)
- 设置可编辑
- javascript学习笔记
- OCP试题解析之053-17 CONFIGURE CONTROLFILE AUTOBACKUP ON
- 第十章 10.5.3节练习 & 10.6节练习
- 【LeetCode】Linked List Cycle II
- 音效和音乐播放要用到的方法
- 把质量控制工作往前推进(1)——安装sonarqube