[iOS微博项目 - 4.5] - 每条微博的底部工具条

A.每条微博的底部工具条
1.需求
  • 每条微博底部都有一个工具条
  • 显示3个按钮:评论、转发、赞
  • 按钮间用分割线隔开
  • 有评论数、转发数、赞数的时候显示相应数据,没有则显示文本
 
Image(158)
 
2.思路
(略)
 
3.实现
 
(1)微博数据模型中已经带有了相应数据字段
 1 //  HVWStatus.h
 2 /** int 转发数 */
 3 @property(nonatomic, assign) int reposts_count;
 4 
 5 /** int 评论数 */
 6 @property(nonatomic, assign) int comments_count;
 7 
 8 /** int 表态数 */
 9 @property(nonatomic, assign) int attitudes_count;
10  
 
(2)直接在toolbar view中,在设置status数据的时候处理
  1 //
  2 //  HVWStatusToolbar.m
  3 //  HVWWeibo
  4 //
  5 //  Created by hellovoidworld on 15/2/12.
  6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
  7 //
  8 
  9 #import "HVWStatusToolbar.h"
 10 
 11 @interface HVWStatusToolbar()
 12 
 13 /** 按钮数组 */
 14 @property(nonatomic, strong) NSMutableArray *buttons;
 15 
 16 /** 分割线数组 */
 17 @property(nonatomic, strong) NSMutableArray *divides;
 18 
 19 /** 转发按钮 */
 20 @property(nonatomic, strong) UIButton *repostButton;
 21 
 22 /** 评论按钮 */
 23 @property(nonatomic, strong) UIButton *commentButton;
 24 
 25 /** 点赞按钮 */
 26 @property(nonatomic, strong) UIButton *attitudeButton;
 27 
 28 @end
 29 
 30 @implementation HVWStatusToolbar
 31 
 32 - (NSMutableArray *)buttons {
 33     if (nil == _buttons) {
 34         _buttons = [NSMutableArray array];
 35     }
 36     return _buttons;
 37 }
 38 
 39 - (NSMutableArray *)divides {
 40     if (nil == _divides) {
 41         _divides = [NSMutableArray array];
 42     }
 43     return _divides;
 44 }
 45 
 46 /** 代码自定义初始化方法 */
 47 - (instancetype)initWithFrame:(CGRect)frame {
 48     self = [super initWithFrame:frame];
 49    
 50     if (self) {
 51         // 设置toolbar背景
 52         self.image = [UIImage resizedImage:@"timeline_card_bottom_background"];
 53        
 54         // 为了按钮能够点击,设置父控件可交互
 55         self.userInteractionEnabled = YES;
 56        
 57         // 添加按钮
 58         self.commentButton = [self setupButtonWithIcon:@"timeline_icon_comment" title:@"评论"];
 59         self.repostButton = [self setupButtonWithIcon:@"timeline_icon_retweet" title:@"转发"];
 60         self.attitudeButton = [self setupButtonWithIcon:@"timeline_icon_unlike" title:@""];
 61        
 62         // 添加分割线
 63         [self setupDivides];
 64     }
 65    
 66     return self;
 67 }
 68 
 69 // 设置按钮
 70 - (UIButton *) setupButtonWithIcon:(NSString *)icon title:(NSString *)title {
 71     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
 72     // 标题
 73     [button setTitle:title forState:UIControlStateNormal];
 74     // 图片
 75     [button setImage:[UIImage imageWithNamed:icon] forState:UIControlStateNormal];
 76     // 字体颜色
 77     [button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
 78     // 字体大小
 79     button.titleLabel.font = [UIFont systemFontOfSize:14];
 80     // 图标、文本之间间隙
 81     [button setTitleEdgeInsets:UIEdgeInsetsMake(0, 15, 0, 0)];
 82     // 高亮背景
 83     [button setBackgroundImage:[UIImage imageWithNamed:@"timeline_card_bottom_background_highlighted"] forState:UIControlStateHighlighted];
 84     // 取消高亮图片调整效果
 85     [button setAdjustsImageWhenHighlighted:NO];
 86    
 87     // 加入到view中
 88     [self addSubview:button];
 89     [self.buttons addObject:button];
 90    
 91     return button;
 92 }
 93 
 94 // 设置分割线
 95 - (void) setupDivides {
 96     for (int i=1; i<self.buttons.count; i++) {
 97         UIImageView *divide = [[UIImageView alloc] init];
 98         divide.image = [UIImage imageWithNamed:@"timeline_card_bottom_line"];
 99         divide.contentMode = UIViewContentModeCenter;
100        
101         [self addSubview:divide];
102         [self.divides addObject:divide];
103     }
104 }
105 
106 /** 设置Frame模型 */
107 - (void)setToolbarFrame:(HVWStatusToolbarFrame *)toolbarFrame {
108     _toolbarFrame = toolbarFrame;
109    
110     // 设置自己的frame
111     self.frame = toolbarFrame.frame;
112    
113     // 配置toolbar按钮数据
114     [self setupToolBarButton];
115 }
116 
117 
118 // 设置子控件frame
119 - (void)layoutSubviews {
120     [super layoutSubviews];
121    
122     // 配置按钮frame
123     CGFloat buttonWidth = self.width / self.buttons.count;
124     CGFloat buttonHeight = self.height;
125     CGFloat buttonY = 0;
126     for (int i=0; i<self.buttons.count; i++) {
127         CGFloat buttonX = i * buttonWidth;
128         UIButton *button = self.buttons[i];
129        
130         button.frame = CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight);
131     }
132    
133     // 配置分割线frame
134     CGFloat divideWidth = 4;
135     CGFloat divideHeight = self.height;
136     for (int i=0; i<self.divides.count; i++) {
137         CGFloat divideX = (i + 1) * buttonWidth;
138         UIImageView *imageView = self.divides[i];
139         imageView.size = CGSizeMake(divideWidth, divideHeight);
140         imageView.center = CGPointMake(divideX, self.height * 0.5);
141     }
142 }
143 
144 /** 设置toolbar按钮数据 */
145 - (void) setupToolBarButton {
146     HVWStatus *status = self.toolbarFrame.status;
147    
148     // 评论
149     [self setupButtonTitle:self.commentButton withOriginalTitle:@"评论" titleCount:status.comments_count];
150    
151     // 转发
152     [self setupButtonTitle:self.repostButton withOriginalTitle:@"转发" titleCount:status.reposts_count];
153    
154     // 点赞
155     [self setupButtonTitle:self.attitudeButton withOriginalTitle:@"" titleCount:status.attitudes_count];
156 }
157 
158 /** 设置按钮标题 */
159 - (void) setupButtonTitle:(UIButton *) button withOriginalTitle:(NSString *)buttonTitle titleCount:(int)titleCount {
160     // 当数量超过1万的时候,使用“万”作为单位
161     if (titleCount >= 10000) {
162         buttonTitle = [NSString stringWithFormat:@"%.1f万", (titleCount / 10000.0)];
163         buttonTitle = [buttonTitle stringByReplacingOccurrencesOfString:@".0" withString:@""]; // 去除".0"小数
164     } else if (titleCount) {
165         buttonTitle = [NSString stringWithFormat:@"%d", titleCount];
166     }
167    
168     [button setTitle:buttonTitle forState:UIControlStateNormal];
169 }
170  
171 @end

 

 
posted @ 2015-03-03 15:30  HelloVoidWorld  阅读(788)  评论(0编辑  收藏  举报