iOS开发项目篇—26修改UITabBar的系统设置

IOS开发项目篇—26修改UITabBar的系统设置

一、简单说明

1.在ios6和ios7两种系统中的现实效果

2.要求实现的效果(在ios6和ios7中基本一致)

二、UITabBar的设置和结构

1.尝试调整UITabBar

通过下面的方式,查看UITabBar内部的子控件

查看子控件继承自:

说明:UItabBarButton:继承自UIControl

   UIButton:继承自UIControl

打印查看每个子控件的内部结构

2.修改系统属性

注意:在ios6系统下

 

  1 //
  2 //  YYTabBarViewController.m
  3 //
  4
  5 #import "YYTabBarViewController.h"
  6 #import "YYHomeTableViewController.h"
  7 #import "YYDiscoverViewController.h"
  8 #import "YYMessageViewController.h"
  9 #import "YYProfileViewController.h"
 10 #import "UIImage+Extension.h"
 11 #import "YYNavigationViewController.h"
 12
 13 @interface YYTabBarViewController ()<UITabBarControllerDelegate>
 14
 15 @end
 16
 17 @implementation YYTabBarViewController
 18
 19
 20 - (void)viewDidLoad
 21 {
 22     [super viewDidLoad];
 23     //添加四个子控制器
 24     YYHomeTableViewController *home=[[YYHomeTableViewController alloc]init];
 25     [self addOneChildVc:home title:@"首页" imageName:@"tabbar_home" selectedImageName:@"tabbar_home_selected"];
 26
 27
 28     YYMessageViewController *message=[[YYMessageViewController alloc]init];
 29     [self addOneChildVc:message title:@"消息" imageName:@"tabbar_message_center" selectedImageName:@"tabbar_message_center_selected"];
 30
 31     YYDiscoverViewController *discover=[[YYDiscoverViewController alloc]init];
 32     [self addOneChildVc:discover title:@"发现" imageName:@"tabbar_discover" selectedImageName:@"tabbar_discover_selected"];
 33
 34     YYProfileViewController *profile=[[YYProfileViewController alloc]init];
 35     [self addOneChildVc:profile title:@"我" imageName:@"tabbar_profile" selectedImageName:@"tabbar_profile_selected"];
 36
 37 //    self.tabBar.backgroundImage=[UIImage imageWithName:@"tabbar_background"];
 38     self.delegate=self;
 39
 40 }
 41
 42 -(void)viewDidAppear:(BOOL)animated
 43 {
 44     [super viewDidAppear:animated];
 45
 46     [self removeBackgroundInTabBarButton];
 47 }
 48
 49 -(void)removeBackgroundInTabBarButton
 50 {
 51     for (UIView *child in self.tabBar.subviews) {
 52         //如果不是UITabBarButton,就过掉
 53         if (![child isKindOfClass:NSClassFromString(@"UITabBarButton")]) continue;
 54
 55         BOOL selected=NO;
 56
 57         for (UIView *childchild in child.subviews) {
 58             if ([childchild isKindOfClass:NSClassFromString(@"UITabBarSelectionIndicatorView")]) {//说明是个选中的背景
 59                 [childchild removeFromSuperview];
 60                 selected = YES;
 61             }
 62
 63             if ([childchild isKindOfClass:[UILabel class]]) {//说明是个UIlable
 64                 UILabel *label = (UILabel *)childchild;
 65 //                label.font=[UIFont systemFontOfSize:15];
 66                 if (selected) {//说明这个button选中,设置文字的颜色为橙色
 67                     label.textColor=[UIColor orangeColor];
 68                 }else           //  说明这个button没有选中,设置label颜色为黑色
 69                 {
 70                     label.textColor=[UIColor blackColor];
 71                 }
 72             }
 73         }
 74     }
 75 }
 76
 77
 78 -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
 79 {
 80     [self removeBackgroundInTabBarButton];
 81 }
 82
 83 /**
 84  *  添加一个子控制器
 85  *
 86  *  @param childVC           子控制对象
 87  *  @param title             标题
 88  *  @param imageName         图标
 89  *  @param selectedImageName 选中时的图标
 90  */
 91 -(void)addOneChildVc:(UIViewController *)childVc title:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName
 92 {
 93     //随机设置子控制器的背景颜色
 94 //    childVc.view.backgroundColor=YYRandomColor;
 95
 96     //设置标题
 97     childVc.title=title;  //相当于设置了后两者的标题
 98 //    childVc.navigationItem.title=title;//设置导航栏的标题
 99 //    childVc.tabBarItem.title=title;//设置tabbar上面的标题
100
101     //设置图标
102     childVc.tabBarItem.image=[UIImage imageWithName:imageName];
103     //设置选中时的图标
104     UIImage *selectedImage=[UIImage imageWithName:selectedImageName];
105
106
107     if (iOS7) {
108         // 声明这张图片用原图(别渲染)
109         selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
110     }
111     childVc.tabBarItem.selectedImage = selectedImage;
112
113      // 添加为tabbar控制器的子控制器
114     YYNavigationViewController *nav=[[YYNavigationViewController alloc]initWithRootViewController:childVc];
115
116     [self addChildViewController:nav];
117
118 }
119
120
121 // 在iOS7中, 会对selectedImage的图片进行再次渲染为蓝色
122 // 要想显示原图, 就必须得告诉它: 不要渲染
123
124 // Xcode的插件安装路径: /Users/用户名/Library/Application Support/Developer/Shared/Xcode/Plug-ins
125 @end

iOS开发项目篇—26修改UITabBar的系统设置

时间: 2024-08-05 22:40:08

iOS开发项目篇—26修改UITabBar的系统设置的相关文章

iOS开发项目篇—27自定义UITabBar

iOS开发项目篇—27自定义UITabBar 一.自定义 思路: (1)新建一个继承自UITabBar的类,自定义一个UITabBar (2)用自定义的UITabBar换掉系统的UItabBar(使用了KVC) (3)监听控制器的切换,只要控制器一切换,就调用代理方法强制重新布局子控件(内部会调用layoutSubviews). YYTabBar.m文件代码: 1 // 2 // YYTabBar.m 3 // 4 5 #import "YYTabBar.h" 6 7 @interfa

iOS开发项目篇—34获取用户信息

iOS开发项目篇—34获取用户信息 一.简单说明 需求:获取当前用户的昵称 ,需要获取当前登录用户的个人信息. 查看接口 要求传递的参数 这里要获取的时用户的昵称(所以使用用户id作为参数传入) 二.实现代码 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 //设置导航栏内容 6 [self setupNavBar]; 7 8 //集成刷新控件 9 [self setupRefresh]; 10 11 //设置用户的昵称为标题 12 [s

iOS开发项目篇—25字典转模型第三方框架、运行时机制简介

iOS开发项目篇—25字典转模型第三方框架.运行时机制简介 一.使用第三方框架完成字典转模型 1.获取框架 在www.code4app.com网站中,搜索字典转模型 可以点击下载代码进行下载,也可以带github上去下载. 管理框架的好处:点击刷新按钮会刷新所有的项目. 2.使用 1.导入第三方框架 2.使用示例 错误提示: 在刷新的时候直接使用一行代码即可: 1 /**加载最新微博数据*/ 2 -(void)loadNewStatus 3 { 4 //1.获得请求管理者 5 AFHTTPReq

iOS开发项目篇—50设置cell的背景

iOS开发项目篇—50设置cell的背景 一.简单说明 当前样式: 1.去掉分隔线 2.设置背景图片(新浪提供了四种图片,底部的图片有阴影) cell的四种背景图 问题:cell怎么知道自己当前是处在第几组的第几行? 在自定义cell中提供一个方法,共外界传递当前的组和行 YYCommonCell.h文件 1 // 2 // YYCommonCell.h 3 // 4 5 #import <Foundation/Foundation.h> 6 @class YYCommonItem; 7 @i

iOS开发项目篇—49“发现”界面完善

iOS开发项目篇—49“发现”界面完善 一.简单说明 已经完成的效果:----->目标效果        需要完善的地方: (1)子标题和标题显示在同一行上. 修改样式:UITableViewCellStyleSubtitle--->UITableViewCellStyleValue1 1 //初始化类方法 2 +(instancetype)cellWithTablView:(UITableView *)tableView 3 { 4 static NSString *ID=@"ID

iOS开发项目篇—05主题设置

iOS开发项目篇—05主题设置 一.实现效果 1.效果图示 注意查看界面的导航栏 消息界面导航栏上的“写消息” 发现界面上的“系统设置” “我”界面上德“设置” 2.实现说明 (1)适配IOS6和IOS7,要求导航标题栏和上面的按钮的设置基本一致. (2)导航栏上德按钮,设置三种状态,默认状态下为橙色,不可用状态下为高亮灰色,点击(高亮)状态下为红色. (3)设置导航栏上的按钮,有两种方式 第一种:下面是消息页面添加“写私信”的代码,可以在每次需要类似设置的时候都拷贝这样的代码. 1 //第一种

iOS开发项目篇-01环境搭建

iOS开发项目篇-01环境搭建 一.基本过程 1.新建一个项目 (1)删除storyboard (2)在配置界面中,把main  删除,手动设置 2.准备素材 图片素材如下: 这个项目是模仿新浪,实现一个山寨的新浪微博系统,新版本的系统中已经放弃了非视网膜屏幕. 说白了,这种情况下,如果手机是3.5英寸的ios7系统,则看不到该启动动画. 设置方法,右键单击show in finder,修改json文件. Contents.json,对文件进行修改,让系统启动画面对3.5英寸的ios7系统提供支

iOS开发项目篇—02添加子控制器以及项目分层

iOS开发项目篇—02添加子控制器以及项目分层 一.添加子控制器 1.设置根控制器(自定义) 说明:分析新浪微博应用,观察其整体建构层次.而系统的控制器不能满足项目开发的需求,这里把项目中原有的控制器删除. 自己定义一个TabBarViewController类.让这个类作为window窗口的根控制器. YYAppDelegate.m文件代码: 1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h&qu

iOS开发项目篇—44会员处理

iOS开发项目篇—44会员处理 一.简单说明 查看已经完成的效果: 存在的问题和调整: (1)时间和昵称之间的间距较大,调整*0.5. (2)转发微博的用户昵称和微博正文间距较大,调整(2). (3).微博来源设置为亮灰色 打开微博来源,修改之前存在的一个bug. 设置颜色为亮灰色 (4).设置时间字体为橙色. 上面一系列调整完成之后的显示效果为: 二.会员设置 1.说明 微博的用户分为会员和非会员,而根据是否是会员,用户昵称的颜色也不一样,会员显示为橙色,普通用户显示为黑色. 哪些属性是何用户