最近发现,以前写的单个cell选中,竟然出了问题,是复用时的问题,导致我重新找到了一个较为完美的解决方法。
实现过程
1 UITableViewCell
@implementation ResourceListCell
-(void)awakeFromNib{
// 选中背景视图
UIView *selectedBg = [UIView new];
selectedBg.backgroundColor = [UIColor colorWithRed:242/255.0 green:177/255.0 blue:74/255.0 alpha:1];
self.selectedBackgroundView = selectedBg;
// 正常背景视图
UIView *normalBg = [UIView new];
normalBg.backgroundColor = [UIColor whiteColor];
self.backgroundView = normalBg;
}
// 这里可以进行一些样式或数据展示方面的设置
-(void)setSelected:(BOOL)selected{
[super setSelected:selected];
if (selected) {
self.textLabel.textColor = [UIColor whiteColor];
}
else{
self.textLabel.textColor = [UIColor colorWithRed:106/255.0 green:106/255.0 blue:106/255.0 alpha:1];
}
}
@end
2 UITableViewDataSource
// cell 复用时
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ResourceListCell" forIndexPath:indexPath];
// 数据
// 上次选中的
if (_indexPathNeedsSelect == indexPath) {
// 自动选中某行,调用[cell setSelected:]
[tableView selectRowAtIndexPath:indexPath animated:false scrollPosition:UITableViewScrollPositionNone];
}
return cell;
}
// 选中cell
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
// 切换数据源
// 选中
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:true];
_indexPathNeedsSelect = indexPath;
}
// 取消选中
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:false];
}
这样就可以较为完整的实现 单个cell 选中的功能了,cell复用不会导致样式的错乱。