iOS 新浪微博-5.2 首页微博列表_转发微博/工具栏
继续于上一篇,还是做首页的功能,这一篇把剩下的首页继续完善。
看看上面的图片,分析:
1.转发微博里面的内容,和原创微博是一样的,由文字+配图组成。这应该放在一个UIView里处理。
2.工具栏也当成一个整体UIView,里面放上三个按钮
通过分析,我们可以得到,一个单元cell,是由 原创微博、转发微博、工具栏三个部分组成,由于转发微博可能没有,配图也不确定,因为都需要对每个元素的Frame进行计算。
转发微博
转发微博和原创微博是一样的。定义好属性,计算好尺寸即可。
Status.h 增加转发微博属性
/** 被转发的原微博信息字段,当该微博为转发微博时返回 */
@property (nonatomic, strong) Status *retweeted_status;
StatusFrame.h 增加转发微博位置及尺寸
/** 转发微博整体 */
@property (nonatomic, assign) CGRect retweetViewF;
/** 转发微博正文 + 昵称 */
@property (nonatomic, assign) CGRect retweetContentLabelF;
/** 转发配图 */
@property (nonatomic, assign) CGRect retweetPhotosViewF;
StatusFrame.m 中,计算转发微博的尺寸
CGFloat toolbarY = ;
/* 被转发微博 */
if (status.retweeted_status) {
Status *retweeted_status = status.retweeted_status;
User *retweeted_status_user = retweeted_status.user; /** 被转发微博正文 */
CGFloat retweetContentX = StatusCellBorderW;
CGFloat retweetContentY = StatusCellBorderW;
NSString *retweetContent = [NSString stringWithFormat:@"@%@ : %@", retweeted_status_user.name, retweeted_status.text];
CGSize retweetContentSize = [retweetContent textSizeWithFont:StatusCellRetweetContentFont maxW:maxW];
self.retweetContentLabelF = (CGRect){{retweetContentX, retweetContentY}, retweetContentSize}; /** 被转发微博配图 */
CGFloat retweetH = ;
if (retweeted_status.pic_urls.count) { // 转发微博有配图
CGFloat retweetPhotosX = retweetContentX;
CGFloat retweetPhotosY = CGRectGetMaxY(self.retweetContentLabelF) + StatusCellBorderW;
CGSize retweetPhotosSize = [StatusPhotosView sizeWithCount:retweeted_status.pic_urls.count];
self.retweetPhotosViewF = (CGRect){{retweetPhotosX, retweetPhotosY}, retweetPhotosSize}; retweetH = CGRectGetMaxY(self.retweetPhotosViewF) + StatusCellBorderW;
} else { // 转发微博没有配图
retweetH = CGRectGetMaxY(self.retweetContentLabelF) + StatusCellBorderW;
} /** 被转发微博整体 */
CGFloat retweetX = ;
CGFloat retweetY = CGRectGetMaxY(self.originalViewF);
CGFloat retweetW = cellW;
self.retweetViewF = CGRectMake(retweetX, retweetY, retweetW, retweetH); toolbarY = CGRectGetMaxY(self.retweetViewF);
} else {
toolbarY = CGRectGetMaxY(self.originalViewF);
}
那么,在StatusCell里增加就很简单了,在initWithStyle 中增加相应的控件,并在 setStatusFrame 设置值
/**
* 初始化转发微博
*/
- (void)setupRetweet
{ /** 转发微博主体*/
UIView *retweetView = [[UIView alloc] init];
retweetView.backgroundColor = YSColor(, , );
[self.contentView addSubview:retweetView];
self.retweetView = retweetView; /** 转发微博正文 + 昵称 */
UILabel *retweetContentLabel = [[UILabel alloc] init];
retweetContentLabel.numberOfLines = ;
retweetContentLabel.font = StatusCellRetweetContentFont;
[retweetView addSubview:retweetContentLabel];
self.retweetContentLabel = retweetContentLabel; /** 转发配图 */
StatusPhotosView *retweetPhotosView = [[StatusPhotosView alloc] init];
[retweetView addSubview:retweetPhotosView];
self.retweetPhotosView = retweetPhotosView;
}
setStatusFrame设置值
// 被转发微博
if(status.retweeted_status){
Status *retweeted_status = status.retweeted_status;
User *retweeted_status_user = retweeted_status.user; self.retweetView.hidden = NO;
self.retweetView.hidden = NO;
/** 被转发的微博整体 */
self.retweetView.frame = statusFrame.retweetViewF; /** 被转发的微博正文 */
NSString *retweetContent = [NSString stringWithFormat:@"@%@ : %@", retweeted_status_user.name, retweeted_status.text];
self.retweetContentLabel.text = retweetContent;
self.retweetContentLabel.frame = statusFrame.retweetContentLabelF; /** 被转发的微博配图 */
if (retweeted_status.pic_urls.count) {
self.retweetPhotosView.frame = statusFrame.retweetPhotosViewF;
self.retweetPhotosView.photos = retweeted_status.pic_urls;
self.retweetPhotosView.hidden = NO;
} else {
self.retweetPhotosView.hidden = YES;
}
} else{
self.retweetView.hidden = YES;
}
运行过,就可以看到结果。
工具栏
工具栏的增加和转发微博是一致的。相应的属性还是要增加的,只是,我们自定义一个UIView 为 StatusToolbar ,在StatusCell里,直接初始化这个View即可。
StatusToolbar.h
#import <UIKit/UIKit.h>
@class Status; @interface StatusToolbar : UIView
+ (instancetype)toolbar; @property(nonatomic,strong) Status *status;
@end
StatusToolbar.m
//
// StatusToolbar.m
//
// Created by Apple on 15/11/14.
// Copyright © 2015年 Jiangys. All rights reserved.
// #import "StatusToolbar.h" @interface StatusToolbar() /** 存放所有的按钮 */
@property(nonatomic,strong) NSMutableArray *btns; /** 分割线 */
@property(nonatomic,strong) NSMutableArray *dividers; @property (nonatomic, weak) UIButton *repostBtn;
@property (nonatomic, weak) UIButton *commentBtn;
@property (nonatomic, weak) UIButton *attitudeBtn; @end @implementation StatusToolbar - (NSMutableArray *)btns
{
if (!_btns) {
self.btns = [NSMutableArray array];
}
return _btns;
} - (NSMutableArray *)dividers
{
if (!_dividers) {
self.dividers = [NSMutableArray array];
}
return _dividers;
} + (instancetype)toolbar
{
return [[self alloc]init];
} - (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// 添加按钮
self.repostBtn = [self setupBtn:@"转发" icon:@"timeline_icon_retweet"];
self.commentBtn = [self setupBtn:@"评论" icon:@"timeline_icon_comment"];
self.attitudeBtn = [self setupBtn:@"赞" icon:@"timeline_icon_unlike"]; // 添加分割线
[self setupDivider];
[self setupDivider];
}
return self;
} /**
* 在这个方法里设置尺寸
*/
- (void)layoutSubviews
{
[super layoutSubviews]; NSUInteger btnCount = self.btns.count;
CGFloat btnW = self.width / btnCount;
CGFloat btnH = self.height; for (int i = ; i < btnCount; i++) {
UIButton *btn = self.btns[i];
btn.y = ;
btn.width = btnW;
btn.height = btnH;
btn.x = i * btnW;
} NSUInteger dividerCount = self.dividers.count;
for (int i = ; i < dividerCount; i++) {
UIImageView *divider = self.dividers[i];
divider.y = ;
divider.x = (i + ) *btnW;
divider.height = btnH;
divider.width = ;
}
} /**
* 初始化一个按钮
*
* @param title 按钮文字
* @param icon 按钮图标
*
* @return 返回按钮
*/
- (UIButton *)setupBtn:(NSString *)title icon:(NSString *)icon
{
UIButton *btn=[[UIButton alloc] init];
[btn setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
btn.titleEdgeInsets = UIEdgeInsetsMake(, , , );
[btn setTitle:title forState:UIControlStateNormal];
[btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"timeline_card_bottom_background_highlighted"] forState:UIControlStateNormal];
btn.titleLabel.font = [UIFont systemFontOfSize:];
[self addSubview:btn]; // 存放按钮
[self.btns addObject:btn]; return btn;
} /**
* 初始化分割线
*/
- (void)setupDivider
{
UIImageView *divider = [[UIImageView alloc] init];
divider.image = [UIImage imageNamed:@"timeline_card_bottom_line"]; [self addSubview:divider]; [self.dividers addObject:divider];
} -(void)setStatus:(Status *)status
{ }
@end
在StatusFrame里,直接设置尺寸
CGFloat toolbarX = ;
CGFloat toolbarW = cellW;
CGFloat toolbarH = ;
_toolbarViewF = CGRectMake(toolbarX, toolbarY, toolbarW, toolbarH);
StatusCell里,使用就很简单了
/**
* 初始化工具条
*/
- (void)setupToolbar
{
StatusToolbar *toolbar = [StatusToolbar toolbar];
[self.contentView addSubview:toolbar];
self.toolbar = toolbar;
}
间隔设置
效果:
思路:
- 给每个tableCell都增加10个内距,使整个Cell都往下移10个像素
- 设置TableViewController 的背景颜色为间隔颜色
- 在tableCell中,清除背景颜色
- 设置原创微博的背景为白色
1.在原创微博上,增加10个像素
/** 原创微博整体 */
CGFloat originalX = ;
CGFloat originalY = StatusCellMargin;
CGFloat originalW = cellW;
_originalViewF = CGRectMake(originalX, originalY, originalW, originalH);
2.设置TableViewController 的背景颜色为间隔颜色
ViewDidLoad 中增加
self.tableView.backgroundColor = YSColor(, , );
3.在tableCell中,清除背景颜色
StatusCell -->initWithStyle 中,增加
self.backgroundColor = [UIColor clearColor];
// 点击cell的时候不要变色
self.selectionStyle = UITableViewCellSelectionStyleNone;
4.设置原创微博的背景为白色
StatusCell -->setupOriginal
/** 原创微博整体 */
UIView *originalView = [[UIView alloc] init];
originalView.backgroundColor = [UIColor whiteColor];
[self.contentView addSubview:originalView];
self.originalView = originalView;
首页整体效果:
章节源代码下载:http://pan.baidu.com/s/1gdqEKkr
新浪微博Github:https://github.com/jiangys/Weibo
iOS 新浪微博-5.2 首页微博列表_转发微博/工具栏的更多相关文章
- iOS 新浪微博-5.0 首页微博列表
首页显示微博列表,是微博的核心部分,这一章节,我们主要是显示出微博的列表. 导入第三方类库 pod 'SDWebImage', '~> 3.7.3' pod 'MJRefresh', '~> ...
- iOS 新浪微博-5.1 首页微博列表_时间/配图
在上一篇中,我们已经把首页微博显示出来了,但还有很多细节,需要我们去调整的.这一章中,我们将处理好时间,配图,工具框及转发微博等小细节的功能. 时间处理 第一步:定义一个时间的类别,用于判断是昨天.今 ...
- iOS 新浪微博-5.3 首页微博列表_集成图片浏览器
实际上,我们可以使用李明杰在教程里集成的MJPhotoBrowser,地址: http://code4app.com/ios/快速集成图片浏览器/525e06116803fa7b0a000001 使用 ...
- IOS SWIFT UITableView 实现简单微博列表
// // Weibo.swift // UITableViewCellExample // // Created by XUYAN on 15/8/15. // Copyright (c) 2015 ...
- Day8-微信小程序实战-交友小程序-首页用户列表渲染及多账号调试及其点赞功能的实现
在这之前已经把编辑个人的所有信息的功能已经完成了 之后先对首页的列表搞动态的,之前都是写死的静态 1.之前都是把好友写死的,现在就在js里面定义一个数组,用循环来动态的绑定 在onReady中定义,取 ...
- Android新浪微博获取评论信息、发表评论、转发微博等
首先前面一节中说过,获取用户的微博信息,这里简单介绍下获取微博的评论信息,以及对微博进行评论,转发微博等. OAuth认证,这里就不多说了, 我说名一下接口: 获取微博的评论列表接口: http:// ...
- 【Android 我的博客APP】1.抓取博客首页文章列表内容——网页数据抓取
打算做个自己在博客园的博客APP,首先要能访问首页获取数据获取首页的文章列表,第一步抓取博客首页文章列表内容的功能已实现,在小米2S上的效果图如下: 思路是:通过编写的工具类访问网页,获取页面源代码, ...
- PHPCMS v9 实现首页,列表页,内容页调用点击量方法
大家好,今天有点闲,看很多朋友经常问PHPCMS v9 首页,列表页,内容页调用点击怎么弄,打算抽时间把代码全部归纳出来,以便大家日后使用,如下: 1,首页调用点击量 {pc:content acti ...
- iOS仿微博客户端一条微博的布局
前言 做一个微博客户端的第三方是自学的第一个实践的项目,自从从事iOS工作之后,就把这个项目给搁置了.趁现在过年回来有些空闲时间,再次修改(总觉得项目就是不停地修改).并且记录一点东西,以后可再回头看 ...
随机推荐
- myeclipse编译弹框:The builder launch configuration could not be found
myEclipse 每次编译时报 "The builder launch configuration could not be found" 的弹框:不影响项目编译启动,但是弹框挺 ...
- echarts tooltip 自定义提示信息添加圆点
tooltip自定义时,给文字前加圆点 tooltip: { formatter: '{b}<br /><span style="display:inline-block; ...
- Python:导入自定义模块
在C语言里为了工程文件的主程序main代码简洁的效果,我们经常用include“XXX”的来导入其.h文件 在Python里Import自己的自定义模块需要注意几个坑 以main主函数和需要导入的ha ...
- ArcEngine利用索引获取图层
近期在做GP工具相关的功能,需要获取到图层并用ComboBox列出,比如图层更新: 开始用了根据图层名获取图层,但这样有个弊端,遇到不同文件夹的相同图层名称的图层gg了.本来想利用图层名+路径来区分, ...
- 2017年蓝桥杯省赛A组c++第6题(字符串匹配算法填空)
/* 标题:最大公共子串 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc" ...
- tst
select count(*) from student where age>18 group by 性别 having count(*)>2 order by age where过滤的是 ...
- scrollView截取指定区域的图片
把scrollView放到一个容器里面,再截图就可以了 scrollview放到容器: UIView *lunboCarrier = [[UIView alloc] initWithFrame:CGR ...
- Shiro 自定义角色 认证
转载,原博文的地址在:https://ailongni.iteye.com/blog/2086022 由于Shiro filterChainDefinitions中 roles默认是and,/** = ...
- 【PyQt5-Qt Designer】文本框读写操作
主要内容: 1.读.写 输入控件(Input Widgets)中的内容(str) 2.保存数据到txt文件 3.从txt文件中读内容,与输入控件中内容比较 将上述各种输入控件(Input Widget ...
- 并查集——易爆物D305
部分内容摘自博客http://blog.csdn.net/u012881011/article/details/46883863,感谢 易爆物D305 运行时间限制:1000m ...