如图所示
需求一:这是一个UITableview,每一行的cell是相同的样式,当点击cell的时候,会改变当前点击cell上的Label的字体颜色,点击别的cell之后,会恢复上一个cell上的label文字颜色,改变当前label的文字颜色,效果就是点击哪一行cell,哪一行cell上的文字变色。
需求二:当进入这个页面的时候,默认选中第一行cell
首先解决需求一,其实很简单,UITableview的delegate已经给我们提供了方法,我们经常用到的方法就是
//这个就是咱们常用到的方法,点击cell的时候,这个方法的参数indexPath.row会返回给我们哪一行数据,这个也是选中的代理,当你选中cell时会走这个方法
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
//以和你表格同样的cell类创建一个新的cell
MyCell * cell=[[MyCell alloc]init];
//利用cellForRowAtIndexPath:复制新的cell
cell=[self.tbv cellForRowAtIndexPath:indexPath];
//这里就可以改变你选中cell上的控件的颜色了
cell.codeLabel.textColor=[UIColor colorWithRed:40/255.0 green:125/255.0 blue:253/255.0 alpha:1.0];
}
以上方法只能改变选中cell上控件的颜色,但是不能把没有点击的cell恢复默认的颜色,这怎么办呢,不要着急,苹果已经为我们铺好路了,其实还有一个UITableview的delegate方法,
就是- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath;
他是用来干什么的呢,它其实就是失去上个cell的点击方法,比如你第一次点击了第一行cell,那么第一行cell变色,然后又点击第二行cell,那么这时候就会走这个方法,而这个方法返回的IndexPath,就是你第一次选中的cell下标,看代码:
- (void)tableView:(UITableView*)tableView didDeselectRowAtIndexPath:(NSIndexPath*)indexPath{
MyCell * cell=[[MyCell alloc]init];
cell=[self.tbv cellForRowAtIndexPath:indexPath];
//这里可以改变label失去颜色的时候,会变成初始黑色
cell.codeLabel.textColor=[UIColor blackColor];
}
是不是很简单,接下里解决需求二:
我们想想,如果刚进入页面的时候,不点击cell的情况下,字体的颜色都是黑色的,怎么能刚进入界面就让文字变成蓝色呢,那么就必须走didSelectRowAtIndexPath:的方法,那么怎么能刚进入界面就走这个方法呢?设置默认选中行呗,但是这里注意,苹果给我们的选择默认行的方法,根本不走didSelectRowAtIndexPath:方法,这时就需要我们手动调用此方法了,看代码
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
self.cell =[RCChargeMoneyCodeTableViewCell cellWithTableView:tableView];
if([self.codeString isEqualToString:self.cell.codeLabel.text]){
//首先给个默认的颜色
self.cell.codeLabel.textColor=[UIColor blueColor];
//设置默认选中的哪一行,这里写死了,是下标为0,也就是第一行
[self.tbv selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
if([self.tbv.delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) {
//手动写点击cell,这样才走点击cell的方法
[self.tbv.delegate tableView:self.tbv didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
}
}
return self.cell;
}
完成!
网友评论