最近在做自定义的cell的操作,由于之前是在网上找的一个类似的东东,结果拿来用的时候就出现了很多的问题,呵呵,结果我还是自己研究了一下,原因就是我之前是使用自定义的cell的问题是,在删除和非删除的过程中进行切换,有个选中和非选中的图片总是迟一步退去,导致的问题是,挡住了后面的内容,‍使得整个看起来不美观,结果我就是使用了UIImageView的隐藏功能,代码我放在下面,github也有的。在使用的时候最好是参照我的另一片博文:IPhone 自定义 UITableViewCell 行缩进(修正版)。好了,看代码。

attentionListCell.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//
// attentionListCell.h
// xunYi6
//
// Created by david on 13-5-16.
// Copyright (c) 2013年 david. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface attentionListCell : UITableViewCell

@property (strong, nonatomic) IBOutlet UIImageView *imageViewPic;
@property (strong, nonatomic) IBOutlet UIImageView *selectImageView;


@property (strong, nonatomic) IBOutlet UILabel *name;
@property (strong, nonatomic) IBOutlet UILabel *index;
@property (strong, nonatomic) IBOutlet UILabel *rank;

@property (copy, nonatomic) UIImage *listImage;
@property (copy, nonatomic) NSString *listName;
@property (copy, nonatomic) NSString *listIndex;
@property (copy, nonatomic) NSString *listRank;
//--------------------------
//编辑操作
//--------------------------
@property (strong, nonatomic) UIImageView *checkImageView;
@property (nonatomic) BOOL checked;
- (void) setChecked:(BOOL)checked;

-(void) setSubViewsFrameEdit;
-(void) setSubViewsFrameNormal;

@end

attentionListCell.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
//
// attentionListCell.m
// xunYi6
//
// Created by david on 13-5-16.
// Copyright (c) 2013年 david. All rights reserved.
//

#import "attentionListCell.h"

@implementation attentionListCell

@synthesize listImage = _listImage;
@synthesize listName = _listName;
@synthesize listIndex = _listIndex;
@synthesize listRank = _listRank;

@synthesize checkImageView = _checkImageView;

@synthesize selectImageView = _selectImageView;

@synthesize checked = _checked;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
}

-(void) setListImage:(UIImage *)value
{
if(![value isEqual:_listImage])
{
_listImage = [value copy];
self.imageViewPic.image = _listImage;
}
}

-(void) setListName:(NSString *)value
{
if(![value isEqualToString:_listName])
{
_listName = [value copy];
self.name.text = _listName;
}
}

-(void) setListIndex:(NSString *)value
{
if(![value isEqualToString:_listIndex])
{
_listIndex = [value copy];
self.index.text = _listIndex;
}

}

-(void) setListRank:(NSString *)value
{
if(![value isEqualToString:_listRank])
{
_listRank = [value copy];
self.rank.text = _listRank;
}
}

-(void) willTransitionToState:(UITableViewCellStateMask)state{
[UIView beginAnimations:@"ResetFrame" context:nil];
[UIView setAnimationDuration:0.7];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self cache:NO];


if(state == UITableViewCellStateDefaultMask)
{
[self setSubViewsFrameNormal];
}
else if(state == UITableViewCellStateShowingEditControlMask)
{
[self setSubViewsFrameEdit];
}
else if(state == UITableViewCellStateShowingDeleteConfirmationMask)
{
[self setSubViewsFrameEdit];
}

[UIView commitAnimations];
}

-(void) setSubViewsFrameEdit{
[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

CGFloat offset = 10.0;

//
CGFloat selectImageX = -25.0;
CGFloat selectImageY = 19.5;
CGFloat selectImageWidth = 30.0;
CGFloat selectImageHeight = 30.0;

CGFloat imageX = 5.0 + offset;
CGFloat imageY = 5.0;
CGFloat imageWidth = 60.0;
CGFloat imageHeight = 60.0;

CGFloat nameX = 70.0 + offset;
CGFloat nameY = 5.0;
CGFloat nameWidth = 240.0 - offset;
CGFloat nameHeight = 15.0;

CGFloat indexX = 70.0 + offset;
CGFloat indexY = 25.0;
CGFloat indexWidth = 240.0 - offset;
CGFloat indexHeight = 15.0;

CGFloat rankX = 70.0 + offset;
CGFloat rankY = 45.0;
CGFloat rankWidth = 240.0 - offset;
CGFloat rankHeight = 15.0;

[self.imageViewPic setFrame:CGRectMake(imageX, imageY, imageWidth, imageHeight)];

[self.name setFrame:CGRectMake(nameX, nameY, nameWidth, nameHeight)];

[self.index setFrame:CGRectMake(indexX, indexY, indexWidth, indexHeight)];

[self.rank setFrame:CGRectMake(rankX, rankY, rankWidth, rankHeight)];

[self.selectImageView setFrame:CGRectMake(selectImageX, selectImageY, selectImageWidth, selectImageHeight)];
_selectImageView.hidden = NO;

[UIView commitAnimations];
}


-(void) setSubViewsFrameNormal{
if(_checkImageView != nil){
[_checkImageView setFrame:CGRectMake(0.0, 20.0, 0.0, 0.0)];
}

CGFloat offset = 0.0;
//
CGFloat selectImageX = 1.0;
CGFloat selectImageY = 19.5;
CGFloat selectImageWidth = 30.0;
CGFloat selectImageHeight = 30.0;

CGFloat imageX = 5.0 + offset;
CGFloat imageY = 5.0;
CGFloat imageWidth = 60.0;
CGFloat imageHeight = 60.0;

CGFloat nameX = 70.0 + offset;
CGFloat nameY = 30.0;
CGFloat nameWidth = 240.0 - offset;
CGFloat nameHeight = 15.0;

CGFloat indexX = 70.0 + offset;
CGFloat indexY = 25.0;
CGFloat indexWidth = 240.0 - offset;
CGFloat indexHeight = 15.0;

CGFloat rankX = 70.0 + offset;
CGFloat rankY = 45.0;
CGFloat rankWidth = 240.0 - offset;
CGFloat rankHeight = 15.0;

[self.imageViewPic setFrame:CGRectMake(imageX, imageY, imageWidth, imageHeight)];

[self.name setFrame:CGRectMake(nameX, nameY, nameWidth, nameHeight)];

[self.index setFrame:CGRectMake(indexX, indexY, indexWidth, indexHeight)];

[self.rank setFrame:CGRectMake(rankX, rankY, rankWidth, rankHeight)];

[self.selectImageView setFrame:CGRectMake(selectImageX, selectImageY, selectImageWidth, selectImageHeight)];
_selectImageView.hidden = YES;
}

//-------------------------------
// 重新定义editing的设置
//-------------------------------
-(void) setEditing:(BOOL)editing animated:(BOOL)animated{

if (self.editing == editing){
return;
}

[super setEditing:editing animated:animated];

if (editing){
CGFloat offset = 10.0;
//
CGFloat selectImageX = -25.0;
CGFloat selectImageY = 19.5;
CGFloat selectImageWidth = 30.0;
CGFloat selectImageHeight = 30.0;


CGFloat imageX = 5.0 + offset;
CGFloat imageY = 5.0;
CGFloat imageWidth = 60.0;
CGFloat imageHeight = 60.0;

CGFloat nameX = 70.0 + offset;
CGFloat nameY = 5.0;
CGFloat nameWidth = 240.0 - offset;
CGFloat nameHeight = 15.0;

CGFloat indexX = 70.0 + offset;
CGFloat indexY = 25.0;
CGFloat indexWidth = 240.0 - offset;
CGFloat indexHeight = 15.0;

CGFloat rankX = 70.0 + offset;
CGFloat rankY = 45.0;
CGFloat rankWidth = 240.0 - offset;
CGFloat rankHeight = 15.0;

[self.imageViewPic setFrame:CGRectMake(imageX, imageY, imageWidth, imageHeight)];

[self.name setFrame:CGRectMake(nameX, nameY, nameWidth, nameHeight)];

[self.index setFrame:CGRectMake(indexX, indexY, indexWidth, indexHeight)];

[self.rank setFrame:CGRectMake(rankX, rankY, rankWidth, rankHeight)];

[self.selectImageView setFrame:CGRectMake(selectImageX, selectImageY, selectImageWidth, selectImageHeight)];

_selectImageView.hidden = NO;

NSString *unselectedPath = [[NSBundle mainBundle] pathForResource:@"attention_unselect" ofType:@"png"];
_selectImageView.image = [UIImage imageWithContentsOfFile:unselectedPath];


[self setChecked:_checked];
}else{
_checked = NO;

}
}


- (void) setChecked:(BOOL)checked{
if (checked){
NSString *selectedPath = [[NSBundle mainBundle] pathForResource:@"attention_select" ofType:@"png"];
_selectImageView.image = [UIImage imageWithContentsOfFile:selectedPath];
self.backgroundView.backgroundColor = [UIColor whiteColor];
}else{
NSString *unselectedPath = [[NSBundle mainBundle] pathForResource:@"attention_unselect" ofType:@"png"];
_selectImageView.image = [UIImage imageWithContentsOfFile:unselectedPath];
self.backgroundView.backgroundColor = [UIColor whiteColor];
}
_checked = checked;
}

@end

代码就是这样的。