[iOS微博项目 - 4.5] - 每条微博的底部工具条
- 每条微博底部都有一个工具条
- 显示3个按钮:评论、转发、赞
- 按钮间用分割线隔开
- 有评论数、转发数、赞数的时候显示相应数据,没有则显示文本

// HVWStatus.h
/** int 转发数 */
@property(nonatomic, assign) int reposts_count; /** int 评论数 */
@property(nonatomic, assign) int comments_count; /** int 表态数 */
@property(nonatomic, assign) int attitudes_count;
//
// HVWStatusToolbar.m
// HVWWeibo
//
// Created by hellovoidworld on 15/2/12.
// Copyright (c) 2015年 hellovoidworld. All rights reserved.
// #import "HVWStatusToolbar.h" @interface HVWStatusToolbar() /** 按钮数组 */
@property(nonatomic, strong) NSMutableArray *buttons; /** 分割线数组 */
@property(nonatomic, strong) NSMutableArray *divides; /** 转发按钮 */
@property(nonatomic, strong) UIButton *repostButton; /** 评论按钮 */
@property(nonatomic, strong) UIButton *commentButton; /** 点赞按钮 */
@property(nonatomic, strong) UIButton *attitudeButton; @end @implementation HVWStatusToolbar - (NSMutableArray *)buttons {
if (nil == _buttons) {
_buttons = [NSMutableArray array];
}
return _buttons;
} - (NSMutableArray *)divides {
if (nil == _divides) {
_divides = [NSMutableArray array];
}
return _divides;
} /** 代码自定义初始化方法 */
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame]; if (self) {
// 设置toolbar背景
self.image = [UIImage resizedImage:@"timeline_card_bottom_background"]; // 为了按钮能够点击,设置父控件可交互
self.userInteractionEnabled = YES; // 添加按钮
self.commentButton = [self setupButtonWithIcon:@"timeline_icon_comment" title:@"评论"];
self.repostButton = [self setupButtonWithIcon:@"timeline_icon_retweet" title:@"转发"];
self.attitudeButton = [self setupButtonWithIcon:@"timeline_icon_unlike" title:@"赞"]; // 添加分割线
[self setupDivides];
} return self;
} // 设置按钮
- (UIButton *) setupButtonWithIcon:(NSString *)icon title:(NSString *)title {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
// 标题
[button setTitle:title forState:UIControlStateNormal];
// 图片
[button setImage:[UIImage imageWithNamed:icon] forState:UIControlStateNormal];
// 字体颜色
[button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
// 字体大小
button.titleLabel.font = [UIFont systemFontOfSize:];
// 图标、文本之间间隙
[button setTitleEdgeInsets:UIEdgeInsetsMake(, , , )];
// 高亮背景
[button setBackgroundImage:[UIImage imageWithNamed:@"timeline_card_bottom_background_highlighted"] forState:UIControlStateHighlighted];
// 取消高亮图片调整效果
[button setAdjustsImageWhenHighlighted:NO]; // 加入到view中
[self addSubview:button];
[self.buttons addObject:button]; return button;
} // 设置分割线
- (void) setupDivides {
for (int i=; i<self.buttons.count; i++) {
UIImageView *divide = [[UIImageView alloc] init];
divide.image = [UIImage imageWithNamed:@"timeline_card_bottom_line"];
divide.contentMode = UIViewContentModeCenter; [self addSubview:divide];
[self.divides addObject:divide];
}
} /** 设置Frame模型 */
- (void)setToolbarFrame:(HVWStatusToolbarFrame *)toolbarFrame {
_toolbarFrame = toolbarFrame; // 设置自己的frame
self.frame = toolbarFrame.frame; // 配置toolbar按钮数据
[self setupToolBarButton];
} // 设置子控件frame
- (void)layoutSubviews {
[super layoutSubviews]; // 配置按钮frame
CGFloat buttonWidth = self.width / self.buttons.count;
CGFloat buttonHeight = self.height;
CGFloat buttonY = ;
for (int i=; i<self.buttons.count; i++) {
CGFloat buttonX = i * buttonWidth;
UIButton *button = self.buttons[i]; button.frame = CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight);
} // 配置分割线frame
CGFloat divideWidth = ;
CGFloat divideHeight = self.height;
for (int i=; i<self.divides.count; i++) {
CGFloat divideX = (i + ) * buttonWidth;
UIImageView *imageView = self.divides[i];
imageView.size = CGSizeMake(divideWidth, divideHeight);
imageView.center = CGPointMake(divideX, self.height * 0.5);
}
} /** 设置toolbar按钮数据 */
- (void) setupToolBarButton {
HVWStatus *status = self.toolbarFrame.status; // 评论
[self setupButtonTitle:self.commentButton withOriginalTitle:@"评论" titleCount:status.comments_count]; // 转发
[self setupButtonTitle:self.repostButton withOriginalTitle:@"转发" titleCount:status.reposts_count]; // 点赞
[self setupButtonTitle:self.attitudeButton withOriginalTitle:@"赞" titleCount:status.attitudes_count];
} /** 设置按钮标题 */
- (void) setupButtonTitle:(UIButton *) button withOriginalTitle:(NSString *)buttonTitle titleCount:(int)titleCount {
// 当数量超过1万的时候,使用“万”作为单位
if (titleCount >= ) {
buttonTitle = [NSString stringWithFormat:@"%.1f万", (titleCount / 10000.0)];
buttonTitle = [buttonTitle stringByReplacingOccurrencesOfString:@".0" withString:@""]; // 去除".0"小数
} else if (titleCount) {
buttonTitle = [NSString stringWithFormat:@"%d", titleCount];
} [button setTitle:buttonTitle forState:UIControlStateNormal];
} @end
[iOS微博项目 - 4.5] - 每条微博的底部工具条的更多相关文章
- [iOS微博项目 - 3.0] - 手动刷新微博
github: https://github.com/hellovoidworld/HVWWeibo A.下拉刷新微博 1.需求 在“首页”界面,下拉到一定距离的时候刷新微博数据 刷新数据的时候使 ...
- [iOS微博项目 - 4.2] - 设置转发微博背景
github: https://github.com/hellovoidworld/HVWWeibo A.转发微博部分的淡灰色背景 1.需求 转发微博部分需要设置背景色 使用图片作为背景 2.思路 ...
- [iOS微博项目 - 4.1] - cell的frame模型
github: https://github.com/hellovoidworld/HVWWeibo A.cell的frame模型设计 1.需求 每个cell都有一个frame实例引用 frame模型 ...
- [ExtJS5学习笔记]第八节 Extjs5的Ext.toolbar.Toolbar工具条组件及其应用
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38515499 本文作者:sushengmiyan ------------------ ...
- 黄聪:自定义WordPress前台、后台顶部菜单栏管理工具条的技巧
使用WordPress开发网站项目,很多时候都需要对进行后台定制,今天倡萌主要分享下自定义顶部管理工具条的使用技巧. 注:如无特殊说明,请将下面的代码添加到主题的 functions.php 或者插 ...
- 黄聪:自定义WordPress顶部管理工具条的技巧(转)
使用WordPress开发网站项目,很多时候都需要对进行后台定制,今天倡萌主要分享下自定义顶部管理工具条的使用技巧. 注:如无特殊说明,请将下面的代码添加到主题的 functions.php 或者插 ...
- 积累的VC编程小技巧之工具条和状态条
1.工具条和状态条中控件的添加: 方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上 ...
- SWIFT显示底部的工具条
有以下页面显示我的讯息,用户可以点击右上角的编辑按钮进入删除状态.点击编辑按钮后,按钮文字改为“取消”,左上角的按钮变为“全选”,同时显示底部工具条带有“删除”按钮 实现起来挺简单的,在正常状态下点击 ...
- iOS开发小技巧--微博项目中的键盘工具条
微博项目中的键盘工具条 项目中的键盘工具条不能使用inputAccessoryView,因为inputAccessoryView不能实现键盘隐藏的时候,工具条还显示在眼前,如图: 所以,果断决定将工具 ...
随机推荐
- python3.7+opencv3.4.1
https://solarianprogrammer.com/2016/09/17/install-opencv-3-with-python-3-on-windows/ https://www.cnb ...
- Debian7/8安装最新的nginx稳定版本
我们知道,通过 apt-get install nginx 就可以安装上nginx,可惜这样安装的nginx版本都有些旧,就连最新的Debian 8.0 默认安装的仍然是1.6.2,更别说 Debia ...
- dp之多重背包poj1276
题意:有现今cash,和n种钱币,每种钱币有ni个,价值为di,求各种钱币组成的不超过cash的最大钱数....... 思路:二进制拆分转化为01背包,或者转化为完全背包都是可以的. 反思:这个题目我 ...
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...
- Windows Phone Unit Test 环境搭建
单元测试对工程质量带来的作用就不详细说明了,本文只讨论如何在WP开发环境下搭建测试工程 历史 从WP7时代官方是不支持UnitTest工程的,因此需要采用WPToolkitTest这个工程来实 ...
- QT 4.8.5 源代码目录调整
* 前言: 有一个代码比较乱的 QT 源码,我想让它分目录整理一下,特此记录一下. * 在原来的代码里面,里面很多文件都是在主文件里面,这样做的话不好维护以及整理 network 里面所有的文件都是和 ...
- 使用shell读取文本文件发送到kafka
#!/bin/sh ## 参数定义 dt=`date +"%Y%m%d" -d "-1 days"` outpath=/xxxx_log_${dt}.txt b ...
- Redis学习笔记——简介及配置
1.Redis简介 Redis概述 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的应用程序的完美解决方案.Redis从它的许多竞争继承来的三个主要特点:Redis数据库 ...
- 回车替换Tab 并不会 提交表单 IE Chrome 通过
网上一堆可以回车替换tab的代码,可是基本都忽略谷歌浏览器的兼容性,找了3个小时 试了无数遍,终于总结出这一段代码,希望能帮到需要的同学,也给自己留个备忘 document.onkeyd ...
- mysql_windows解压包安装
WIN下安装64位的解压版mysql-5.6.24-winx64 参考如下安装步骤: 1.将解压缩后的文件放到自己想要的地方 并配置环境变量. 示例中存放的目录为:D:\Program Files\m ...