山寨新浪微博——TabBarController
因为最近项目高仿新浪微博,所以我决定写一个新浪的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相关推荐
- 山寨新浪微博客户端与新浪微博API调用的总结
这次是我第一次写的项目总结,虽然这只是一个小项目,但确实是获益良多.虽然说是独立完成,但其实在做的过程中,也有和大家交流了很多意见.尽管如此,我对这个尚不能算写好的项目,还是有非常多的不满意.不过碍于 ...
- 山寨新浪微博的用户名片(简易实现)
用到了namespace.lazyLoad等技巧 丢到tomcat/webapps/ROOT目录下就可以访问了 有疑问或者不满请在下方拍砖或QQ联系zuoming@wendui.com 附件下载 目录 ...
- 再见,腾讯微博!仅比新浪晚8个月,用户超3亿,宣布即将关停
9月5日晚间,腾讯微博发布官方公告称,由于业务调整,将于2020年9月28日晚23时59分停止服务和运营,届时将无法登录.如有需要,可在停止服务前,备份自己的相关信息. 消息一出,不少人都表示惋惜,纷 ...
- ios小项目——新浪微博客户端总结
2019独角兽企业重金招聘Python工程师标准>>> 们还是登录不了,你们要用还是得自己申请appkey并且把回调网址设为baidu.或者是再下面留言,留下你的微博uid我把你加入 ...
- 新浪微博封装类,以及常见问题sdk修改
新浪微博的sdk太垃圾了,吐槽下. 首先接口封装的不好, 连个请求都没做异步,AsyncWeiboRunner,看起来貌似异步,用起来.哎.卡就一个字 还有你绑定微博做个WebView也就算了.. ...
- 高度自定义的TabBarController 两个TableView之间的联动
高度自定义的TabBarController 两个TableView之间的联动 高度自定义的TabBarController(上传者:yuping2901) 功能强大的自定义TabBarControl ...
- 活跃度降40% 社交平台机会丧失!七问新浪微博
2019独角兽企业重金招聘Python工程师标准>>> ( 1 ) 文/阑夕(国信安达信息技术有限公司社会化媒体营销总监) 授权搜狐IT发布 一公斤铁和一公斤棉花,哪个更重?&q ...
- android项目之山寨天天动听 — 前言
自己零零碎碎的学习了android相关知识,总的来说发现一个问题,以前学的一个知识就是一个知识,一个demo就是一个demo.虽然以前做了个新浪微博客户端,但是那毕竟是我们第一个项目,并且那个时候 对 ...
- 用TabControl实现新浪微博客户端样式的面板
© 2012 野比 conmajia@gmail.com 注意:关于TabControl的自定义制作方法,请参考此文<一步一步玩控件:自定义TabControl--从山寨Safari开始> ...
- 新浪微博最新 SDK 编程思路
// 是否为iOS7 #define iOS7 ([UIDevice currentDevice].systemVersion.doubleValue >= 7.0) // 是否为4inch # ...
最新文章
- Unity制作2D动作平台游戏视频教程
- java 佳博打印机,佳博蓝牙打印的java 连接
- linux c计算两个int相除求百分比的实现
- 简单 黑苹果dsdt教程_黑苹果笔记本:关于DSDT亮度表的分析与修改
- matlab 把区间等分分,MATLAB数学实验报告 定积分的近似计算
- 六级词汇打卡第三天(三)
- Python爬虫 --- 2.2 Scrapy 选择器的介绍
- 洛谷 P2622 关灯问题II (状态压缩+BFS)
- Python 操作 protobuf 常见用法
- My SQL中show命令--MySQL中帮助查看
- 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——2.2节理解主机到主机的通信模型...
- mapabc 国人推荐
- Android 运行时权限
- phpnow php.ini,phpnow php探针环境检测代码
- 可以将每日计划以及日程提醒事项记录下来的待办清单便签有哪些
- 计算机方向键是哪个键,left键是哪个键
- 阿里云域名注册流程(全流程详细教程)
- 网闸标底--网神G6150-C022
- java程序员i5 i7_买电脑选择i5还是i7?很多人被忽悠了,专业人士说出了3点实话!...
- 为什么要做业务全场景的梳理?
热门文章
- 数独计算机在线,js数独计算器
- L1-7 机工士姆斯塔迪奥
- GDKOI2021普及组滚粗记
- ioi 赛制_钟子谦IOI2019参赛总结
- 新浪微博开发平台基于php的sdk包(包含demo程序),新浪微博API开发简介之用户授权(PHP基础篇)_PHP教程...
- linux设备i2c优先级,Linux设备之I2C
- intel android 平板,IT百科之英特尔芯平板
- Python数据可视化的例子——折线图(line)
- 计算机组成原理中各种校验码,计算机组成原理保姆级复习资料
- 区块链对人工智能的变革:去中心化将带来数据新范式