因为最近项目高仿新浪微博,所以我决定写一个新浪的UI,因为之前都是纯使用微博,从来没有细想过微博的实现过程,一开始凭感觉做,做出来发现里面还是一些比较恶心的地方。从头开讲。

一开始还是写tabBarController,因为微博的发布按钮与其他按钮显然的区别,所以觉得要定制tabBarController,但是后来一看,尼玛。。。。新浪用的原生tabBarController,好吧!虽然顶自己定制也能做的一波一样,但是太麻烦!于是,这里就出现了两种方式,韩老板的方法是重写tabBar,用tabBar的layoutSubviews重绘按钮位置。我用的方式则是创建一个假的controller占位,然后创建一个Button加在tabBar上,去覆盖controller按钮的位置。这两种方式都能实现功能!下面就用我的方法来讲如何实现微博的TabBarController。

首先我们self.window的根视图是一个NavigationController,而不是tabBarController。

    UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:[YHRootViewController new]];self.window.rootViewController = nav;

接下来是在tabBarController里做事情了。直接上代码,备注写好了的。

#import "YHRootViewController.h"
#import "YHPublishButton.h"
#import "YHHomeViewController.h"
#import "YHMessageViewController.h"
#import "YHPublishViewController.h"
#import "YHDiscoverViewController.h"
#import "YHMeViewController.h"
#import "YHChoosePublishWayView.h"
#import "YHUIFactory.h"
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
@interface YHRootViewController ()<UITabBarControllerDelegate>
{YHPublishButton * _publishButton;
}
@end@implementation YHRootViewController
- (void)viewDidLoad {[super viewDidLoad];/***  将item上选中是字体设置为——橙色*/[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor orangeColor], NSForegroundColorAttributeName,nil] forState:UIControlStateSelected];[self loadControllers];[self addPublishButton];self.delegate = self;
}
- (void)loadControllers
{NSArray * viewControllerNameArray = @[@"YHHomeViewController",@"YHMessageViewController",@"YHPublishViewController",@"YHDiscoverViewController",@"YHMeViewController"];NSArray * viewControllerTitleArray = @[@"主页",@"消息",@"",@"发现",@"我的"];NSArray * viewControllerBgArray = @[@"tabbar_home",@"tabbar_message_center",@"不存在的图片",@"tabbar_discover",@"tabbar_profile"];NSArray * viewControllerSelectBgArray = @[@"tabbar_home_selected",@"tabbar_message_center_selected",@"不存在的图片",@"tabbar_discover_selected",@"tabbar_profile_selected"];NSMutableArray * viewControllers = [[NSMutableArray alloc] init];/***  工厂模式创建viewController*/for (int i = 0; i < viewControllerNameArray.count; i++) {UIViewController * tempViewController = [YHUIFactory createViewController:viewControllerNameArray[i]];tempViewController.tabBarItem.title = viewControllerTitleArray[i];tempViewController.tabBarItem.image = [[UIImage imageNamed:viewControllerBgArray[i]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];tempViewController.tabBarItem.selectedImage = [[UIImage imageNamed:viewControllerSelectBgArray[i]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];[viewControllers addObject:tempViewController];};/***  加入viewControllers*/self.viewControllers = [viewControllers copy];
}
- (void)addPublishButton
{float w = 60;float h = 45;/**发布按钮*/_publishButton  = [[YHPublishButton alloc] initWithFrame:(CGRectMake(( SCREEN_WIDTH- w) / 2, 2 , w, h))];[_publishButton setTitle:@"+" forState:(UIControlStateNormal)];_publishButton.titleLabel.font = [UIFont systemFontOfSize:50.0];[_publishButton setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:(UIControlStateNormal)];[_publishButton addTarget:self action:@selector(publishGo:) forControlEvents:(UIControlEventTouchUpInside)];[self.tabBar addSubview:_publishButton];
}
- (void)publishGo:(UIButton *)sender
{YHChoosePublishWayView * cp = [[YHChoosePublishWayView alloc] initWithFrame:(CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT))];[self.view addSubview:cp];/***  选择发布内容的页面Block**  @param num 判断是那种方式发布*/cp.publishBlock = ^(int num){/***  以模态方式推出*/[self presentViewController:[YHPublishViewController new] animated:YES completion:nil];};
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{/***  清空消息提示*/viewController.tabBarItem.badgeValue = nil;
}

先写这么多,开始写公司项目了。。。。烦。。。。

山寨新浪微博——TabBarController相关推荐

  1. 山寨新浪微博客户端与新浪微博API调用的总结

    这次是我第一次写的项目总结,虽然这只是一个小项目,但确实是获益良多.虽然说是独立完成,但其实在做的过程中,也有和大家交流了很多意见.尽管如此,我对这个尚不能算写好的项目,还是有非常多的不满意.不过碍于 ...

  2. 山寨新浪微博的用户名片(简易实现)

    用到了namespace.lazyLoad等技巧 丢到tomcat/webapps/ROOT目录下就可以访问了 有疑问或者不满请在下方拍砖或QQ联系zuoming@wendui.com 附件下载 目录 ...

  3. 再见,腾讯微博!仅比新浪晚8个月,用户超3亿,宣布即将关停

    9月5日晚间,腾讯微博发布官方公告称,由于业务调整,将于2020年9月28日晚23时59分停止服务和运营,届时将无法登录.如有需要,可在停止服务前,备份自己的相关信息. 消息一出,不少人都表示惋惜,纷 ...

  4. ios小项目——新浪微博客户端总结

    2019独角兽企业重金招聘Python工程师标准>>> 们还是登录不了,你们要用还是得自己申请appkey并且把回调网址设为baidu.或者是再下面留言,留下你的微博uid我把你加入 ...

  5. 新浪微博封装类,以及常见问题sdk修改

    新浪微博的sdk太垃圾了,吐槽下. 首先接口封装的不好, 连个请求都没做异步,AsyncWeiboRunner,看起来貌似异步,用起来.哎.卡就一个字 还有你绑定微博做个WebView也就算了..   ...

  6. 高度自定义的TabBarController 两个TableView之间的联动

    高度自定义的TabBarController 两个TableView之间的联动 高度自定义的TabBarController(上传者:yuping2901) 功能强大的自定义TabBarControl ...

  7. 活跃度降40% 社交平台机会丧失!七问新浪微博

    2019独角兽企业重金招聘Python工程师标准>>> ( 1 )   文/阑夕(国信安达信息技术有限公司社会化媒体营销总监) 授权搜狐IT发布 一公斤铁和一公斤棉花,哪个更重?&q ...

  8. android项目之山寨天天动听 — 前言

    自己零零碎碎的学习了android相关知识,总的来说发现一个问题,以前学的一个知识就是一个知识,一个demo就是一个demo.虽然以前做了个新浪微博客户端,但是那毕竟是我们第一个项目,并且那个时候 对 ...

  9. 用TabControl实现新浪微博客户端样式的面板

    © 2012 野比 conmajia@gmail.com 注意:关于TabControl的自定义制作方法,请参考此文<一步一步玩控件:自定义TabControl--从山寨Safari开始> ...

  10. 新浪微博最新 SDK 编程思路

    // 是否为iOS7 #define iOS7 ([UIDevice currentDevice].systemVersion.doubleValue >= 7.0) // 是否为4inch # ...

最新文章

  1. Unity制作2D动作平台游戏视频教程
  2. java 佳博打印机,佳博蓝牙打印的java 连接
  3. linux c计算两个int相除求百分比的实现
  4. 简单 黑苹果dsdt教程_黑苹果笔记本:关于DSDT亮度表的分析与修改
  5. matlab 把区间等分分,MATLAB数学实验报告 定积分的近似计算
  6. 六级词汇打卡第三天(三)
  7. Python爬虫 --- 2.2 Scrapy 选择器的介绍
  8. 洛谷 P2622 关灯问题II (状态压缩+BFS)
  9. Python 操作 protobuf 常见用法
  10. My SQL中show命令--MySQL中帮助查看
  11. 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——2.2节理解主机到主机的通信模型...
  12. mapabc 国人推荐
  13. Android 运行时权限
  14. phpnow php.ini,phpnow php探针环境检测代码
  15. 可以将每日计划以及日程提醒事项记录下来的待办清单便签有哪些
  16. 计算机方向键是哪个键,left键是哪个键
  17. 阿里云域名注册流程(全流程详细教程)
  18. 网闸标底--网神G6150-C022
  19. java程序员i5 i7_买电脑选择i5还是i7?很多人被忽悠了,专业人士说出了3点实话!...
  20. 为什么要做业务全场景的梳理?

热门文章

  1. 数独计算机在线,js数独计算器
  2. L1-7 机工士姆斯塔迪奥
  3. GDKOI2021普及组滚粗记
  4. ioi 赛制_钟子谦IOI2019参赛总结
  5. 新浪微博开发平台基于php的sdk包(包含demo程序),新浪微博API开发简介之用户授权(PHP基础篇)_PHP教程...
  6. linux设备i2c优先级,Linux设备之I2C
  7. intel android 平板,IT百科之英特尔芯平板
  8. Python数据可视化的例子——折线图(line)
  9. 计算机组成原理中各种校验码,计算机组成原理保姆级复习资料
  10. 区块链对人工智能的变革:去中心化将带来数据新范式