iOS开发项目篇—41cell的frame设计

iOS开发项目篇—41cell的frame设计

一、简单说明

1.分层设计

在进行设计的时候,建议先分析整个cell的结构,确定了cell由哪些模块构成之后,再进一步确定每个模块中包含的子控件。

在这个微博的cell中,把这个cell分成两个大的模块。分解结构如下:

1.微博完整内容模块View

(1)原创微博view

  1)头像imageView

  2)自己的昵称label

  3)发布的时间label

  4)微博来源label

  5)微博的正文

(2)转发微博

  1)原作者的昵称label

  2)转发的微博正文label

2.toolbar工具条模块View

(1)转发button

(2)评论button

(3)赞button

示意图:

分层设计的好处:屏蔽了最上层和最下层的处理细节,下层代码修改后,顶层不需要跟着进行修改。

(1)每个类的冗余度低,易于维护

(2)业务逻辑精准,每个类只封装自己该做的事情

2.frame的设计

对应于模块的设计,得出frame设计的示意图:

说明:需要新建5个类。管理对应的frame。

二、代码设计

1.文件结构

2.代码实现

YYStatusCell.h文件

 1 //
 2 //  YYStatusCell.h
 3 //
 4
 5 #import <UIKit/UIKit.h>
 6 @class YYStatusFrame;
 7 @interface YYStatusCell : UITableViewCell
 8 #warning 注意这里不能直接使用frame作为属性名。继承自UIview,而它本身就有一个frame。
 9 @property(nonatomic,strong)YYStatusFrame *statusFrame;
10 @end

YYStatusCell.m文件

 1 //
 2 //  YYStatusCell.m
 3 //  自定义cell
 4
 5 #import "YYStatusCell.h"
 6 #import "YYStatusDetailView.h"
 7 #import "YYStatusToolbar.h"
 8 //#import "YYStatusDetailFrame.h"
 9 #import "YYStatusFrame.h"
10
11 @interface YYStatusCell ()
12 @property(nonatomic,weak)YYStatusDetailView *detailView;
13 @property(nonatomic,weak)YYStatusToolbar *toolbar;
14 @end
15
16 @implementation YYStatusCell
17
18 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
19 {
20     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
21     if (self) {
22         //初始化子控件
23
24         //1.添加微博具体内容
25         [self setupDetailView];
26
27         //2.添加工具条
28         [self setupToolbar];
29     }
30     return self;
31 }
32
33 /**添加微博具体内容*/
34 -(void)setupDetailView
35 {
36     YYStatusDetailView *detailView=[[YYStatusDetailView alloc]init];
37     [self.contentView addSubview:detailView];
38     self.detailView=detailView;
39 }
40
41 /**添加工具条*/
42 -(void)setupToolbar
43 {
44     YYStatusToolbar *toolbar=[[YYStatusToolbar alloc]init];
45     [self.contentView addSubview:toolbar];
46     self.toolbar=toolbar;
47 }
48
49 -(void)setStatusFrame:(YYStatusFrame *)statusFrame
50 {
51     _statusFrame=statusFrame;
52     //1.微博具体内容的frame数据
53     self.detailView.detailFrame=statusFrame.StatusDetailFrame;
54
55     //2.底部工具条的frame数据
56     self.toolbar.frame=statusFrame.toolbarFrame;
57 }
58 @end

YYStatusFrame.h文件

 1 //
 2 //  YYStatusFrame.h
 3 //一个Frame包括一个cell内部所有的子控件的frame和显示数据
 4
 5 //获取frame--->根据传入的数据值进行计算,这里需要传入微博数据模型,对子控件的frame进行分层
 6 #import <Foundation/Foundation.h>
 7 @class YYStatusModel,YYStatusDetailFrame;
 8 @interface YYStatusFrame : NSObject
 9
10 /**
11  *  toolbar工具条的frame
12  */
13 @property(nonatomic,assign)CGRect toolbarFrame;
14 /**
15  *  微博整体内容的frame
16  */
17 @property(nonatomic,strong)YYStatusDetailFrame *StatusDetailFrame;
18 /**
19  *  cell的高度
20  */
21 @property(nonatomic,assign)CGFloat cellHight;
22
23 //传入微博数据模型
24 @property(nonatomic,strong)YYStatusModel *status;
25 @end

YYStatusFrame.m文件

 1 //
 2 //  YYStatusFrame.m
 3 //
 4
 5 #import "YYStatusFrame.h"
 6 #import "YYStatusDetailFrame.h"
 7
 8 @implementation YYStatusFrame
 9 -(void)setStatus:(YYStatusModel *)status
10 {
11     _status=status;
12     //1.计算微博的具体内容(微博整体)
13     [self setupStatusDetailFrame];
14
15     //2.计算底部工具条
16     [self setupToolbarFrame];
17
18     //3.计算cell的高度
19     self.cellHight=CGRectGetMaxY(self.toolbarFrame);
20 }
21
22 /**
23  *  计算微博的具体内容(微博整体)
24  */
25 -(void)setupStatusDetailFrame
26 {
27     YYStatusDetailFrame *detailFrame=[[YYStatusDetailFrame alloc]init];
28     detailFrame.status=self.status;
29     self.StatusDetailFrame=detailFrame;
30 }
31
32 /**
33  *  计算底部工具条
34  */
35 -(void)setupToolbarFrame
36 {
37     CGFloat toolbarX=0;
38     CGFloat toolbarW=YYScreenW;
39     CGFloat toolbarH=35;
40     CGFloat toolbarY=CGRectGetMaxY(self.StatusDetailFrame.frame);
41     self.toolbarFrame=CGRectMake(toolbarX, toolbarY, toolbarW, toolbarH);
42 }
43 @end

YYStatusDetailView.h文件

 1 //
 2 //  YYStatusDetailView.h
 3 //
 4
 5 #import <UIKit/UIKit.h>
 6
 7 @class  YYStatusDetailFrame;
 8 @interface YYStatusDetailView : UIView
 9 @property(nonatomic,strong)YYStatusDetailFrame *detailFrame;
10 @end

YYStatusDetailView.m文件

 1 //
 2 //  YYStatusDetailView.m
 3 //
 4
 5 #import "YYStatusDetailView.h"
 6 #import "YYStatusOriginalView.h"
 7 #import "YYStatusRetweetedView.h"
 8 #import "YYStatusDetailFrame.h"
 9
10 @interface YYStatusDetailView ()
11 @property(nonatomic,weak)YYStatusOriginalView *OriginalView;
12 @property(nonatomic,weak)YYStatusRetweetedView *retweetedView;
13 @end
14 @implementation YYStatusDetailView
15
16 - (id)initWithFrame:(CGRect)frame
17 {
18     self = [super initWithFrame:frame];
19     if (self) {
20         //初始化子控件
21
22         //1.添加原创微博
23         [self setupOriginalView];
24
25         //2.添加转发微博
26         [self setupRetweetedView];
27     }
28     return self;
29 }
30 /**添加原创微博*/
31 -(void)setupOriginalView
32 {
33     YYStatusOriginalView *OriginalView = [[YYStatusOriginalView alloc]init];
34     [self addSubview:OriginalView];
35     self.OriginalView=OriginalView;
36
37 }
38 /**添加转发微博*/
39 -(void)setupRetweetedView
40 {
41     YYStatusRetweetedView *retweetedView = [[YYStatusRetweetedView alloc]init];
42     [self addSubview:retweetedView];
43     self.retweetedView=retweetedView;
44 }
45
46 -(void)setDetailFrame:(YYStatusDetailFrame *)detailFrame
47 {
48     _detailFrame=detailFrame;
49
50     //0.设置自己的frame
51     self.frame=detailFrame.frame;
52
53     //1.原创微博的frame的设置
54     self.OriginalView.originalFrame=detailFrame.originalFrame;
55
56     //2.转发微博的frame的设置
57     self.retweetedView.retweetedFrame=detailFrame.retweetedFrame;
58 }
59 @end

YYStatusDetailFrame.h文件

 1 //
 2 //  YYStatusDetailFrame.h
 3 //
 4
 5 #import <Foundation/Foundation.h>
 6
 7 @class YYStatusModel,YYStatusOriginalFrame,YYStatusRetweetedFrame;
 8 @interface YYStatusDetailFrame : NSObject
 9
10 /**
11  *  微博数据模型
12  */
13 @property(nonatomic,strong)YYStatusModel *status;
14
15 @property(nonatomic,strong)YYStatusOriginalFrame *originalFrame;
16 @property(nonatomic,strong)YYStatusRetweetedFrame *retweetedFrame;
17 /**
18  *  自己的frame
19  */
20 @property(nonatomic,assign)CGRect frame;
21 @end

YYStatusDetailFrame.m文件

 1 //
 2 //  YYStatusDetailFrame.m
 3 //
 4
 5 #import "YYStatusDetailFrame.h"
 6 #import "YYStatusOriginalFrame.h"
 7 #import "YYStatusRetweetedFrame.h"
 8 #import "YYStatusModel.h"
 9
10 @interface YYStatusDetailFrame ()
11 @property(nonatomic,assign)CGFloat tempHeight;
12 @end
13 @implementation YYStatusDetailFrame
14
15 -(void)setStatus:(YYStatusModel *)status
16 {
17     _status=status;
18     //1.计算原创微博的frame
19     [self setupStatusOriginalFrame];
20
21     //2.计算转发微博的frame
22     [self setupStatusRetweetedFrameWithStatus:status];
23
24     //3.计算自己的frame
25     [self setupDetailFrame];
26
27 }
28
29 /**
30  *  计算原创微博的frame
31  */
32 -(void)setupStatusOriginalFrame
33 {
34     YYStatusOriginalFrame *originalFrame=[[YYStatusOriginalFrame alloc]init];
35     originalFrame.status=self.status;
36     self.originalFrame=originalFrame;
37 }
38
39 /**
40  *  计算转发微博的frame
41  */
42 -(void)setupStatusRetweetedFrameWithStatus:(YYStatusModel *)status
43 {
44     if (status.retweeted_status) {
45         YYStatusRetweetedFrame *retweetedFrame=[[YYStatusRetweetedFrame alloc]init];
46         retweetedFrame.retweeted_status=status.retweeted_status;
47         self.retweetedFrame=retweetedFrame;
48
49         CGRect f=retweetedFrame.frame;
50         f.origin.y=CGRectGetMaxY(self.originalFrame.frame);
51         retweetedFrame.frame=f;
52        self.tempHeight=CGRectGetMaxY(self.retweetedFrame.frame);
53     }else
54     {
55         self.tempHeight=CGRectGetMaxX(self.originalFrame.frame);
56     }
57
58 }
59
60 /**
61  *  计算自己的frame
62  */
63 -(void)setupDetailFrame
64 {
65     CGFloat x=0;
66     CGFloat y=0;
67     CGFloat w=YYScreenW;
68     CGFloat h=self.tempHeight;
69     self.frame=CGRectMake(x, y, w, h);
70 }
71 @end

YYStatusOriginal.h文件

 1 //
 2 //  YYStatusOriginal.h
 3 //
 4
 5 #import <UIKit/UIKit.h>
 6
 7 @class YYStatusOriginalFrame;
 8 @interface YYStatusOriginalView : UIView
 9 @property(nonatomic,strong)YYStatusOriginalFrame *originalFrame;
10 @end

YYStatusOriginal.m文件

  1 //
  2 //  YYStatusOriginal.m
  3 //  34-微博搭建cell的基本结构
  4 //
  5 //  Created by apple on 14-7-17.
  6 //  Copyright (c) 2014年 itcase. All rights reserved.
  7 //
  8
  9 #import "YYStatusOriginalView.h"
 10 #import "YYStatusOriginalFrame.h"
 11 #import "YYUserModel.h"
 12 #include "YYStatusModel.h"
 13 #import "UIImageView+WebCache.h"
 14
 15 @interface YYStatusOriginalView ()
 16 /**
 17  *  头像
 18  */
 19 @property(nonatomic,weak)UIImageView *iconView;
 20 /**
 21  *  昵称
 22  */
 23 @property(nonatomic,weak)UILabel  *nameLabel;
 24 /**
 25  *  微博的正文
 26  */
 27 @property(nonatomic,weak)UILabel *textLabel;
 28 /**
 29  *  时间
 30  */
 31 @property(nonatomic,weak)UILabel *timeLabel;
 32 /**
 33  *  来源
 34  */
 35 @property(nonatomic,weak)UILabel *sourceLabel;
 36
 37 @end
 38 @implementation YYStatusOriginalView
 39
 40 - (id)initWithFrame:(CGRect)frame
 41 {
 42     self = [super initWithFrame:frame];
 43     if (self) {
 44         //初始化子控件
 45         //1.头像
 46         UIImageView *iconView=[[UIImageView alloc]init];
 47         [self addSubview:iconView];
 48         self.iconView=iconView;
 49
 50         //2.昵称
 51         UILabel *nameLabel=[[UILabel alloc]init];
 52         [self addSubview:nameLabel];
 53         self.nameLabel=nameLabel;
 54
 55         //3.正文
 56         UILabel *textLabel=[[UILabel alloc]init];
 57         [self addSubview:textLabel];
 58         self.textLabel=textLabel;
 59
 60         //4.时间
 61         UILabel *timeLabel=[[UILabel alloc]init];
 62         [self addSubview:timeLabel];
 63         self.timeLabel=timeLabel;
 64
 65         //5.来源
 66         UILabel *sourceLabel=[[UILabel alloc]init];
 67         [self addSubview:sourceLabel];
 68         self.sourceLabel=sourceLabel;
 69
 70     }
 71     return self;
 72 }
 73
 74 -(void)setOriginalFrame:(YYStatusOriginalFrame *)originalFrame
 75 {
 76     _originalFrame=originalFrame;
 77
 78     //设置自己的frame
 79     self.frame=originalFrame.frame;
 80
 81     //取出模型数据
 82     YYStatusModel *status=originalFrame.status;
 83
 84     //设置头像的frame
 85     [self.iconView setImageWithURL:[NSURL URLWithString:status.user.profile_image_url] placeholderImage:[UIImage imageWithName:@"avatar_default_small"]];
 86     self.iconView.frame=originalFrame.iconFrame;
 87
 88     //设置昵称的frame
 89     self.nameLabel.text=status.user.name;
 90     self.nameLabel.frame=originalFrame.nameFrame;
 91
 92     //设置正文的frame
 93     self.textLabel.text=status.text;
 94     self.textLabel.frame=originalFrame.textFrame;
 95
 96     //设置时间的frame
 97     self.timeLabel.text=status.created_at;
 98     self.timeLabel.frame=originalFrame.timeFrame;
 99
100     //设置来源的frame
101     self.sourceLabel.text=status.source;
102     self.sourceLabel.frame=originalFrame.sourceFrame;
103
104 }
105 @end

YYStatusOriginalFrame.h文件

 1 //
 2 //  YYStatusOriginalFrame.h
 3 //
 4
 5 #import <Foundation/Foundation.h>
 6
 7 @class YYStatusModel;
 8 @interface YYStatusOriginalFrame : NSObject
 9 /**
10  *  微博数据模型
11  */
12 @property(nonatomic,strong)YYStatusModel *status;
13
14 /** 昵称 */
15 @property (nonatomic, assign) CGRect nameFrame;
16 /** 正文 */
17 @property (nonatomic, assign) CGRect textFrame;
18 /** 来源 */
19 @property (nonatomic, assign) CGRect sourceFrame;
20 /** 时间 */
21 @property (nonatomic, assign) CGRect timeFrame;
22 /** 头像 */
23 @property (nonatomic, assign) CGRect iconFrame;
24
25 /** 自己的frame */
26 @property (nonatomic, assign) CGRect frame;
27 @end

YYStatusOriginalFrame.m文件

 1 //
 2 //  YYStatusOriginalFrame.m
 3 //
 4
 5 #import "YYStatusOriginalFrame.h"
 6 #import "YYStatusModel.h"
 7 #import "YYUserModel.h"
 8
 9
10 @implementation YYStatusOriginalFrame
11 -(void)setStatus:(YYStatusModel *)status
12 {
13     _status=status;
14     //1.计算头像的frame
15     CGFloat iconX=YYCellStatusInset;
16     CGFloat iconY=YYCellStatusInset;
17     CGFloat iconW=35;
18     CGFloat iconH=35;
19     self.iconFrame=CGRectMake(iconX, iconY, iconW, iconH);
20
21     //2.计算昵称的frame
22     CGFloat nameX=CGRectGetMaxX(self.iconFrame) + YYCellStatusInset;
23     CGFloat nameY=iconY;
24     CGSize nameSize=[status.user.name sizeWithFont:YYStatusOrginalNameFont];
25 //    self.iconFrame=CGRectMake(nameX, nameY, nameSize.width,nameSize.height);
26     self.nameFrame=(CGRect){{nameX,nameY},nameSize};
27
28     //3.计算时间的frame
29     CGFloat timeX=nameX;
30     CGFloat timeY=CGRectGetMaxY(self.nameFrame)+YYCellStatusInset;
31     CGSize timeSize=[status.created_at sizeWithFont:YYStatusOrginalTimeFont];
32     self.timeFrame=(CGRect){{timeX,timeY},timeSize};
33
34     //4.计算发布来源的frame
35     CGFloat sourcceX=CGRectGetMaxX(self.textFrame)+YYCellStatusInset;
36     CGFloat sourcceY=timeY;
37     CGSize sourcceSize=[status.source sizeWithFont:YYStatusOrginalSourceFont];
38     self.sourceFrame=(CGRect){{sourcceX,sourcceY},sourcceSize};
39
40     //5.计算微博正文的frame
41 #warning 注意计算的区别
42     CGFloat textX=iconX;
43     CGFloat textY=CGRectGetMaxY(self.iconFrame)+YYCellStatusInset;
44     CGFloat maxW=YYScreenW-2*YYCellStatusInset;
45     CGSize maxSize=CGSizeMake(maxW, MAXFLOAT);
46     CGSize textSize=[status.text sizeWithFont:YYStatusOrginalTextFont constrainedToSize:maxSize];
47     self.textFrame=(CGRect){{textX,textY},sourcceSize};
48
49     //6.计算自己的frame
50     CGFloat x=0;
51     CGFloat y=0;
52     CGFloat w=YYScreenW;
53     CGFloat h=CGRectGetMaxY(self.textFrame)+YYCellStatusInset;
54     self.frame=CGRectMake(x, y, w, y);
55 }
56 @end

YYStatusRetweetedView.h文件

1 //
2 //  YYStatusRetweetedView.h
3 //
4
5 #import <UIKit/UIKit.h>
6 @class YYStatusRetweetedFrame;
7 @interface YYStatusRetweetedView : UIView
8 @property(nonatomic,strong)YYStatusRetweetedFrame *retweetedFrame;
9 @end

YYStatusRetweetedView.m文件

 1 //
 2 //  YYStatusRetweetedView.m
 3 //
 4
 5 #import "YYStatusRetweetedView.h"
 6 #import "YYStatusRetweetedFrame.h"
 7 #import "YYStatusModel.h"
 8 #import "YYUserModel.h"
 9
10 @interface YYStatusRetweetedView ()
11 /**
12  *  昵称
13  */
14 @property(nonatomic,weak)UILabel  *nameLabel;
15 /**
16  *  微博的正文
17  */
18 @property(nonatomic,weak)UILabel *textLabel;
19 @end
20 @implementation YYStatusRetweetedView
21
22 - (id)initWithFrame:(CGRect)frame
23 {
24     self = [super initWithFrame:frame];
25     if (self) {
26     //初始化子控件
27     //1.添加昵称
28         UILabel *nameLabel=[[UILabel alloc]init];
29         [self addSubview:nameLabel];
30         self.nameLabel=nameLabel;
31
32     //2.添加微博正文
33         UILabel *textLabel=[[UILabel alloc]init];
34         [self addSubview:textLabel];
35         self.textLabel=textLabel;
36     }
37     return self;
38 }
39
40 -(void)setRetweetedFrame:(YYStatusRetweetedFrame *)retweetedFrame
41 {
42     _retweetedFrame=retweetedFrame;
43
44     //取出对应的数据模型
45     YYStatusModel *retweeted_status=retweetedFrame.retweeted_status;
46
47     //设置自己的frame
48     self.frame=retweetedFrame.frame;
49
50     //设置昵称的frame
51     self.nameLabel.text=retweeted_status.user.name;
52     self.nameLabel.frame=retweetedFrame.nameFrame;
53
54     //设置正文的frame
55     self.textLabel.text=retweeted_status.text;
56     self.textLabel.frame=retweetedFrame.textFrame;
57 }
58
59 @end

YYStatusRetweetedFrame.h文件

 1 //
 2 //  YYStatusRetweetedFrame.h
 3 //
 4
 5 #import <Foundation/Foundation.h>
 6
 7 @class YYStatusModel;
 8 @interface YYStatusRetweetedFrame : NSObject
 9 /**
10  *  转发微博数据模型
11  */
12 @property(nonatomic,strong)YYStatusModel *retweeted_status;
13
14 /** 昵称 */
15 @property (nonatomic, assign) CGRect nameFrame;
16 /** 正文 */
17 @property (nonatomic, assign) CGRect textFrame;
18
19 /** 自己的frame */
20 @property (nonatomic, assign) CGRect frame;
21 @end

YYStatusRetweetedFrame.m文件

 1 //
 2 //  YYStatusRetweetedFrame.m
 3 //
 4
 5 #import "YYStatusRetweetedFrame.h"
 6 #import "YYStatusModel.h"
 7 #import "YYUserModel.h"
 8
 9 @implementation YYStatusRetweetedFrame
10 -(void)setRetweeted_status:(YYStatusModel *)retweeted_status
11 {
12     _retweeted_status=retweeted_status;
13
14     //1.计算昵称的frame
15     CGFloat nameX=YYCellStatusInset;
16     CGFloat nameY=YYCellStatusInset;
17     CGSize nameSize=[retweeted_status.user.name sizeWithFont:YYStatusRetweetedNameFont];
18     self.nameFrame=(CGRect){{nameX,nameY},nameSize};
19
20     //2.计算转发微博的正文的frame
21     CGFloat textX=nameX;
22     CGFloat textY=CGRectGetMaxY(self.nameFrame)+YYCellStatusInset;
23     CGFloat maxW=YYScreenW-2*YYCellStatusInset;
24     CGSize maxSize=CGSizeMake(maxW, MAXFLOAT);
25     CGSize textSize=[retweeted_status.text sizeWithFont:YYStatusRetweetedTextFont constrainedToSize:maxSize];
26     self.textFrame=(CGRect){{textX,textY},textSize};
27
28     //3.计算自己的frame
29     CGFloat x=0;
30 #warning y值为在整个view中的设置,为原创微博的最大的Y值,但是在这里拿不到这个值,可以到外面进行设置
31     CGFloat y=0;
32     CGFloat w=YYScreenW;
33     CGFloat h=CGRectGetMaxY(self.textFrame)+YYCellStatusInset;
34     self.frame=CGRectMake(x, y, w, h);
35 }
36 @end

iOS开发项目篇—41cell的frame设计

时间: 2024-11-08 02:08:35

iOS开发项目篇—41cell的frame设计的相关文章

iOS开发项目篇—41cell的frame的细节处理

iOS开发项目篇—41cell的frame的细节处理 一.简单说明 在首页控制器中使用自定义的UITableViewcell 代码如下: YYHomeTableViewController.m文件 1 // 2 // YYHomeTableViewController.m 3 // 4 5 #import "YYHomeTableViewController.h" 6 #import "YYOneViewController.h" 7 #import "Y

iOS开发项目篇—36封装微博业务

iOS开发项目篇—36封装微博业务 一.简单说明 1.请求参数面向模型 2.请求结果面向模型 3.对控制器来说应该屏蔽业务细节.不让控制器关心(知道)业务细节,它只需要知道自己在做某个业务 @通过一个专门的业务处理类:处理微博业务细节 说明: 业务:加载新的微博首页数据 实现:给新浪服务器发送一个GET请求 业务:加载更多的首页微博数据 实现1:给新浪服务器发送一个GET请求 实现2:去沙盒中加载以前离线缓存的微博数据  二.实现 1.新建一个微博业务处理类,继承自NSObject 微博业务处理

iOS开发项目篇—53&quot;我&quot;界面的搭建

iOS开发项目篇—53"我"界面的搭建 一.简单说明 由于“我”这个界面和发现控制器的界面在本质上是一样的,所以,在这里可以拷贝以快速的完成“我”这个控制器界面的搭建. 全部拷贝,粘贴之后,简单的调整就可以了. 实现的代码如下: YYProfileViewController.m文件 1 // 2 // YYProfileViewController.m 3 // 4 5 #import "YYProfileViewController.h" 6 #import &

iOS开发项目篇—39获取用户未读的微博信息(信息提醒)

iOS开发项目篇—39获取用户未读的微博信息(信息提醒) 一.简单说明 1.实现效果       2.实现 (1)新建一个类,封装请求 查看新浪官方要求的请求参数 该类中的代码设计 YYUnreadCountParam.h文件 1 // YYUnreadCountParam.h 2 //封装请求参数的类 3 4 #import "YYBaseParam.h" 5 6 @interface YYUnreadCountParam : YYBaseParam 7 /**uid true in

iOS开发项目篇—46时间和来源的处理(cell的复用问题)

iOS开发项目篇—46时间和来源的处理(cell的复用问题)一.简单说明 1.存在的问题:             2.问题描述: 刷新微博界面后,展示的最新的微博数据时间显示为“刚刚”,在项目中对时间进行设计的时候,如果是在1分钟之内发表的,那么显示为“刚刚”.查看后面的微博数据后,回过头来(1分钟已经过去了),此时之前显示为“刚刚”的微博,应该显示XX分钟以前,确实显示了,但是时间的frame不正确(此时的frame=="刚刚"两个字的frame). 提示:cell的复用问题,为了

iOS开发项目篇—44会员处理

iOS开发项目篇—44会员处理 一.简单说明 查看已经完成的效果: 存在的问题和调整: (1)时间和昵称之间的间距较大,调整*0.5. (2)转发微博的用户昵称和微博正文间距较大,调整(2). (3).微博来源设置为亮灰色 打开微博来源,修改之前存在的一个bug. 设置颜色为亮灰色 (4).设置时间字体为橙色. 上面一系列调整完成之后的显示效果为: 二.会员设置 1.说明 微博的用户分为会员和非会员,而根据是否是会员,用户昵称的颜色也不一样,会员显示为橙色,普通用户显示为黑色. 哪些属性是何用户

iOS开发项目篇—38深层重构

iOS开发项目篇—38深层重构 一.简单说明 说明:可以发现每个工具类,内部方法的代码长相都差不多,可以考虑再抽取出一个处理业务的公共的工具类,让其他的业务类继承自这个工具类,降低代码的冗余度. 1.新建一个工具类 该基础业务处理工具类中的代码设计: YYBaseTool.h文件 1 // 2 // YYBaseTool.h 3 4 //最基本的业务工具类 5 6 #import <Foundation/Foundation.h> 7 8 @interface YYBaseTool : NSO

iOS开发项目篇—51cell右边的内容处理

iOS开发项目篇—51cell右边的内容处理 一.简单说明 1.说明 Cell右边的内容<几种显示情况 (1)箭头 (2)文字 (3)什么都没有 (4)开关 (5)打钩 注意:不要试图使用枚举(这样会让这个类越来越大) 实现思路:子类化,每一个子类专门负责右边的显示内容. 2.实现 先设置右边显示内容为箭头和开关两种情况. 新建一个类,继承自YYCommonItem,表示右边显示内容为箭头 新建一个类,继承自YYCommonItem,表示右边显示内容为开关 设置显示代码:(设置第一组每行的右边显

iOS开发项目篇—40搭建cell的基本结构

iOS开发项目篇—40搭建cell的基本结构 一.简单说明 1.策略:针对微博可能出现的多种情况(只有文字,有文字有配图,有转发微博等),一次性加载所用的子控件到cell中,对于没有数据的空间进行隐藏.(不管cell以后会显示什么子控件,把所有有可能显示的子控件都添加上去·添加到contentView上) 微博cell的显示示例: 2.自定义cell的步骤: 1.新建一个继承自UITablecell的子类 2.在initWithStyle:方法中进行子控件的初始化 (1)将有可能显示的所有子控件