继续于上一篇,还是做首页的功能,这一篇把剩下的首页继续完善。

看看上面的图片,分析:

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
// Weibo
//
// 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;
}

间隔设置

效果:

思路:

  1. 给每个tableCell都增加10个内距,使整个Cell都往下移10个像素
  2. 设置TableViewController 的背景颜色为间隔颜色
  3. 在tableCell中,清除背景颜色
  4. 设置原创微博的背景为白色

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 首页微博列表_转发微博/工具栏的更多相关文章

  1. iOS 新浪微博-5.0 首页微博列表

    首页显示微博列表,是微博的核心部分,这一章节,我们主要是显示出微博的列表. 导入第三方类库 pod 'SDWebImage', '~> 3.7.3' pod 'MJRefresh', '~> ...

  2. iOS 新浪微博-5.1 首页微博列表_时间/配图

    在上一篇中,我们已经把首页微博显示出来了,但还有很多细节,需要我们去调整的.这一章中,我们将处理好时间,配图,工具框及转发微博等小细节的功能. 时间处理 第一步:定义一个时间的类别,用于判断是昨天.今 ...

  3. iOS 新浪微博-5.3 首页微博列表_集成图片浏览器

    实际上,我们可以使用李明杰在教程里集成的MJPhotoBrowser,地址: http://code4app.com/ios/快速集成图片浏览器/525e06116803fa7b0a000001 使用 ...

  4. IOS SWIFT UITableView 实现简单微博列表

    // // Weibo.swift // UITableViewCellExample // // Created by XUYAN on 15/8/15. // Copyright (c) 2015 ...

  5. Day8-微信小程序实战-交友小程序-首页用户列表渲染及多账号调试及其点赞功能的实现

    在这之前已经把编辑个人的所有信息的功能已经完成了 之后先对首页的列表搞动态的,之前都是写死的静态 1.之前都是把好友写死的,现在就在js里面定义一个数组,用循环来动态的绑定 在onReady中定义,取 ...

  6. Android新浪微博获取评论信息、发表评论、转发微博等

    首先前面一节中说过,获取用户的微博信息,这里简单介绍下获取微博的评论信息,以及对微博进行评论,转发微博等. OAuth认证,这里就不多说了, 我说名一下接口: 获取微博的评论列表接口: http:// ...

  7. 【Android 我的博客APP】1.抓取博客首页文章列表内容——网页数据抓取

    打算做个自己在博客园的博客APP,首先要能访问首页获取数据获取首页的文章列表,第一步抓取博客首页文章列表内容的功能已实现,在小米2S上的效果图如下: 思路是:通过编写的工具类访问网页,获取页面源代码, ...

  8. PHPCMS v9 实现首页,列表页,内容页调用点击量方法

    大家好,今天有点闲,看很多朋友经常问PHPCMS v9 首页,列表页,内容页调用点击怎么弄,打算抽时间把代码全部归纳出来,以便大家日后使用,如下: 1,首页调用点击量 {pc:content acti ...

  9. iOS仿微博客户端一条微博的布局

    前言 做一个微博客户端的第三方是自学的第一个实践的项目,自从从事iOS工作之后,就把这个项目给搁置了.趁现在过年回来有些空闲时间,再次修改(总觉得项目就是不停地修改).并且记录一点东西,以后可再回头看 ...

随机推荐

  1. is7.5和iis8文件上传大小限制30M修改方法

    C:\Windows\System32\inetsrv\config\schema\ 下的IIS_schema.xml文件,但是考虑到安全等问题,而且这个文件默认是只读的,所以不建议直接修改这个配置文 ...

  2. [No000015A]SQL语句分类

    1.Data Definition Language(DDL) 数据定义 CREATE - 在数据库中创建对象: ALTER - 修改数据库结构: DROP - 删除对象: RENAME - 重命名对 ...

  3. React 60S倒计时

    React 60S倒计时 1.设置状态: 2.函数主体: 3.应用: 4..效果图:

  4. CSS3 transform 属性

    CSS3 transform 属性 语法: transform: none|transform-functions; 值 描述 none 定义不进行转换. matrix(n,n,n,n,n,n) 定义 ...

  5. 对内存分配的理解 自动变量 局部变量 临时变量 外部变量 字符串长度 C语言可以看成由一些列的外部对象构成

    Status ListInsert_Sq(SqList *L,int i,LElemType_Sq e) { LElemType_Sq *newbase; LElemType_Sq *p,*q; if ...

  6. [elastic search][redis] 初试 ElasticSearch / redis

    现有项目组,工作需要. http://www.cnblogs.com/xing901022/p/4704319.html Elastic Search权威指南(中文版) https://es.xiao ...

  7. day3_元组

    元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 一.创建元组 1.普通创建 实例1: >> ...

  8. LeetCode 728 Self Dividing Numbers 解题报告

    题目要求 A self-dividing number is a number that is divisible by every digit it contains. For example, 1 ...

  9. LeetCode 965 Univalued Binary Tree 解题报告

    题目要求 A binary tree is univalued if every node in the tree has the same value. Return true if and onl ...

  10. javascript判断两个对象属性以及值是否相等

    objIsEqual(obj1,obj2){//比较两个对象键值对是否相等 var o1 = obj1 instanceof Object; var o2 = obj2 instanceof Obje ...