AJ分享,必须精品

一:效果图

自定义tabBar实现最下面中间的添加按钮

二:思路

首先在自己的tabBarController中把系统的tabBar设置成自己的tabBar(NYTabBar),这里由于tabBar的属性是readonly的,所以我们要用kvc或者是消息管理来设置他

然后就写自己的NYTabBar。这个写起来首先 遍历当前tabBar上的所有view,如果是UITabBarButton,就取出来重新设置他们的位置,并且重新赋值,接下来就是空出中间的添加的位置,然后把添加按钮放上去,就ok了。

三:代码

调用

首先是如何调用的代码

    //自定义tabBar
NYTabBar *tabBar = [[NYTabBar alloc]initWithFrame:self.tabBar.frame]; //用kvc把readly的tabBar属性改成自定义的
[self setValue:tabBar forKey:@"tabBar"];

NYTabBar.m

NYTabBar.h文件就不写了 ,里面啥都没有

NYTabBar.m:

//
// Created by apple on 15-7-24.
// Copyright (c) 2015年 znycat. All rights reserved.
// #import "NYTabBar.h" @interface NYTabBar()
/**
* 添加增加按钮
*/
@property (nonatomic, weak) UIButton *addButton;
@end
@implementation NYTabBar -(UIButton *)addButton
{
if (_addButton == nil) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:UIControlStateNormal]; [btn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted];
[btn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted]; _addButton = btn; //是按钮的尺寸默认跟背景图片一样大
[btn sizeToFit]; [self addSubview:_addButton]; }
return _addButton;
} //调整子空间的位置
-(void)layoutSubviews
{
[super layoutSubviews]; CGFloat w = self.bounds.size.width;
CGFloat h = self.bounds.size.height; CGFloat btnX = 0;
CGFloat btnY = 0;
CGFloat btnW = w / 5;
CGFloat btnH = h; int i = 0; //1 , 遍历当前tabBar上的所有view
for (UIView *tabBarBtn in self.subviews) {
//2,如果是UITabBarButton,就取出来重新设置他们的位置
if ([tabBarBtn isKindOfClass:NSClassFromString(@"UITabBarButton")]) { btnX = i * btnW; tabBarBtn.frame = CGRectMake(btnX, btnY, btnW, btnH); //当到了第二个时候,再加一个位置空竹添加按钮的位置。
if (i==1) {
i++;
} i++;
}
} //设置添加按钮 add按钮的位置
self.addButton.center = CGPointMake(w * 0.5, h * 0.5); } @end

四:补充

调用的时候还可以用消息管理

    //自定义tabBar
NYTabBar *tabBar = [[NYTabBar alloc]initWithFrame:self.tabBar.frame];
/*这个地方还有一种用消息管理设置的,这样也可以,使用个步骤是 1:先导入头文件#import <objc/message.h>
2:到项目中Build Settings中查找msg ,然后把yes改成no
3:代码写objc_msgSend调用就行了
注意:这样的方法框架中比较多,目的为了不让人看懂,还有显得c牛逼,——————没啥鸟用。。
*/
//用消息管理设置
objc_msgSend(self, @selector(setTabBar:),tabBar);

步骤:
1:先导入头文件

#import <objc/message.h>

2:到项目中Build Settings中查找msg ,然后把yes改成no

3:代码写objc_msgSend调用就行了
注意:这样的方法框架中比较多,目的为了不让人看懂,还有显得c牛逼,——————没啥鸟用。。

AJ学IOS 之微博项目实战(4)微博自定义tabBar中间的添加按钮的更多相关文章

  1. AJ学IOS 之微博项目实战(1)微博主框架-子控制器的添加

    AJ分享,必须精品 一:简单介绍 这是新浪微博的iOS端项目,来自于黑马的一个实战项目. 主要分成五大模块,本次全部运用纯代码实现,其中会用到很多前面学过得内容,如果有的地方有重复的知识点,说明这个知 ...

  2. AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController

    AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封 ...

  3. 猫猫学iOS 之微博项目实战(2)微博主框架-自己定义导航控制器NavigationController

    猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 一:加入导航控制器 上一篇博 ...

  4. AJ学IOS(44)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配

    AJ分享,必须精品 效果: 注意图里面了吗,其实那个效果做起来真的很简单,在iOS中苹果给我们封装的很好,关键是那个按钮 系统的按钮的图片是在左边的,这里我们需要把他调整到右边,然后呢需要我们自己做一 ...

  5. AJ学IOS 之微博项目实战(5)微博自定义搜索框searchBar

    AJ分享,必须精品 一:效果 用UITextField简单定义一个搜索框 二:调用: 调用的代码,很简单,直接init就可以,以后加功能自己添加就行了. - (void)viewDidLoad { [ ...

  6. AJ学IOS 之微博项目实战(10)微博cell中图片的显示以及各种填充模式简介

    AJ分享,必须精品 :一效果 如果直接设置会有拉伸等等的状况,这里主要介绍图片显示的一些细节 二:代码 代码实现其实很简单,微博当中用了一个photos来存放九宫格这些图片,然后用了一个photo类来 ...

  7. AJ学IOS 之微博项目实战(9)微博模型之时间相关重要操作,判断刚刚,昨天,今年等等

    AJ分享,必须精品 一:效果 二:实现代码 /** 1.今年 1> 今天 * 1分内: 刚刚 * 1分~59分内:xx分钟前 * 大于60分钟:xx小时前 2> 昨天 * 昨天 xx:xx ...

  8. AJ学IOS 之微博项目实战(3)微博主框架-UIImage防止iOS7之后自动渲染_定义分类

    AJ分享,必须精品 一:效果对比 当我们设置tabBarController的tabBarItem.image的时候,默认情况下会出现图片变成蓝色的效果,这是因为ios7之后会对图片自动渲染成蓝色 代 ...

  9. 猫猫学iOS 之微博项目实战(5)微博自己定义搜索框searchBar

    猫猫分享.必须精品 原创文章.欢迎转载. 转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:效果 用UITextField简单定义一个搜索框 二:调用 ...

随机推荐

  1. 【转载】oracle的安装和配置

    转自: https://blog.csdn.net/weixin_40364885/article/details/80787472 一.概念 oracle在使用的时候时是不收费的,如果你要在工作中来 ...

  2. [剑指offer]10.斐波那契数列+青蛙跳台阶问题

    10- I. 斐波那契数列 方法一 Top-down 用递归实现 def fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...

  3. mpy开发物联网系列:1.mpy与服务器数据库方案

    ini配置文件与非关系型数据库 在使用micropython开发esp32过程中,经常涉及到一些数据的配置读取,而esp32本身micropython难以安装很多数据库客户端的库,只能基于本地文件使用 ...

  4. hdu1226超级密码 bfs

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1226/ 题目大意是:寻找一个五百位之内的C进制密码,该密码是N的正整数倍,而且只能用给定的数构成密码,求这样的密 ...

  5. mac下 yarn Stack trace: ExitCodeException exitCode=127

    问题出在hadoop 为mac系统配置的读取java_home处. 更改 /Users/shaofengfeng/apache/hadoop/libexec/hadoop-config.sh 如下 # ...

  6. 收藏 | 15 个你非了解不可的 Linux 特殊字符,妈妈再也不用担心我看不懂这些符号了!

    不知道大家接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有用处呢,今天的文章就给大家简单地科普一下 Linux 中你需要了解的 15 个特殊字符 ...

  7. JUC 中提供的限流利器-Semaphore(信号量)

    在 JUC 包下,有一个 Semaphore 类,翻译成信号量,Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.Semaphore 跟锁 ...

  8. Linux下MySQL的数据库安装

    centos7 + mysql5.7 tar包解压安装 先执行wget https://dev.mysql.com//Downloads/MySQL-5.7/mysql-5.7.18-linux-gl ...

  9. Python批量修改Excel中的文件内容

    import osimport xlrdfrom xlutils.copy import copydef base_dir(filename=None):    return os.path.join ...

  10. 理解BERT:一个突破性NLP框架的综合指南

    概述 Google的BERT改变了自然语言处理(NLP)的格局 了解BERT是什么,它如何工作以及产生的影响等 我们还将在Python中实现BERT,为你提供动手学习的经验 BERT简介 想象一下-- ...