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工作之后,就把这个项目给搁置了.趁现在过年回来有些空闲时间,再次修改(总觉得项目就是不停地修改).并且记录一点东西,以后可再回头看 ...
随机推荐
- easyui datagrid 去掉外边框及行与行之间的横线标题字体
这是以前写的一个项目中写的东西,为了让datagrid样式好看,所有做的这个处理: 今天同事又问到于是记录下来 $('#id').datagrid({ width: '99%', height: 15 ...
- 深入 Vue 生命周期
深入 Vue 生命周期 这篇博客将会从下面四个常见的应用诠释组件的生命周期,以及各个生命周期应该干什么事 1.单组件的生命周期 2.父子组件的生命周期 3.兄弟组件的生命周期 4.宏mixin的生命周 ...
- HTML5:基本语句
HTML5:超文本标记语言(HTML)第五次重大修改 我用的sulime编辑器,用Package contorl后安装emmet插件来编辑HTML代码,以下为sublime操作小技巧 ctrl+s 保 ...
- tomcat远程部署war包,显示连接被重置
在tomcat 目录: /opt/apache-tomcat-9.0.13/webapps/manager/WEB-INF/web.xml 下修改: <multipart-config> ...
- [development][dpdk][pktgen] 网卡收发包性能测试
一: 多队列及中断信息收集 [root@T185 ~]# ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: RX Mini ...
- Boost 常用的库
boost是一系列C++模板库组成的免费,可移植,开源的程序库.网络上关于boost的文章已经很多. 这里摘记一些库的信息,供自己日后参考. 0.foreach - BOOST_FOREACH ...
- jmeter_用户并发登录
部分摘自:https://blog.csdn.net/weixin_41291554/article/details/80492276 第一种方案:对登录账号和密码进行参数化 1.添加设置线程数: N ...
- 如何使用List<HashMap<String, String>>详细讲解
场景:要循环界面Table数据源与导出Excel数据源作对比. 说明: List<HashMap<String,String>> List中每一项都是一个HashMap Ha ...
- ubuntu windows10 in GPT HDD GRUB Boot
some thing wrong with my input, I can just use English -_-!!! The HDD have two kinds of formart, GP ...
- 解决采集知乎数据时由于账号被封遗漏的账号重爬问题(python代码)
'''一.最笨的办法了################################################################为了处理由于账号被封而没跑到的问题id进行以下两步 ...