UITableViewCell 设置单元格选中后只显示一个打勾的状态

1、//第一种方法:在选中时先遍历整个可见单元格,设置所有行的默认样式,再设置选中的这行样式,此方法不能取消单元格的选中

- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath

{

NSArray*array = [tableViewvisibleCells];

for(UITableViewCell*cellinarray) {

[cellsetAccessoryType:UITableViewCellAccessoryNone];

cell.textLabel.textColor=[UIColorblackColor];

}

UITableViewCell*cell=[self.tableViewcellForRowAtIndexPath:indexPath];

cell.textLabel.textColor=[UIColorblueColor];

[cellsetAccessoryType:UITableViewCellAccessoryCheckmark];

}

此时只设定了在可见范围内选择的是一行,还得设置滚动后的选中状态,

-(void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath

{

NSIndexPath*index=[tableViewindexPathForSelectedRow];

if(index.row==indexPath.row&& index!=nil)

{

cell.backgroundColor=[UIColorcolorWithRed:232.0/255.0green:232.0/255.0blue:232.0/255.0alpha:1.0];

cell.textLabel.textColor=[UIColorcolorWithRed:0.0green:206.0/255.0blue:192.0/255.0alpha:1.0];

}

else

{

cell.backgroundColor=[UIColor clearColor];

cell.textLabel.textColor=[UIColor blackColor];

}

}

单元格是否相同需要用到比较方法

NSIndexPath*index=[tableViewindexPathForSelectedRow];

NSComparisonResultresult=[indexPathcompare:index];

2、//第二种方法:先定位到最后一行,若选中最后一行直接退出,否则用递归改变上次选中的状态,重新设置本次选中的状态。

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

{

current=indexPath.row;

}

- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath

{

if(indexPath.row==current){

return;

}

UITableViewCell*newCell = [tableViewcellForRowAtIndexPath:indexPath];

if(newCell.accessoryType==UITableViewCellAccessoryNone)

{

newCell.accessoryType=UITableViewCellAccessoryCheckmark;

newCell.textLabel.textColor=[UIColorblueColor];

}

NSIndexPath*oldIndexPath =[NSIndexPathindexPathForRow:current

inSection:0];

UITableViewCell*oldCell = [tableViewcellForRowAtIndexPath:oldIndexPath];

if(oldCell.accessoryType==UITableViewCellAccessoryCheckmark)

{

oldCell.accessoryType=UITableViewCellAccessoryNone;

oldCell.textLabel.textColor=[UIColorblackColor];

}

current=indexPath.row;

}

3.//方法三:设置一个全局变量,选中的时候传值,然后通过重新加载数据,使得在选中这行打勾,其他行无样式,此方法加载的时候第一行默认打勾了

- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath

{

current=indexPath.row;

[self.tableViewreloadData];

}

- (UITableViewCellAccessoryType)tableView:(UITableView*)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath*)indexPath

{

if(current==indexPath.row&¤t!=nil)

{

returnUITableViewCellAccessoryCheckmark;

}

else

{

returnUITableViewCellAccessoryNone;

}

}

或者直接在

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath里面设置

单元格的默认高度为44

NSLog(@"%@",NSStringFromCGRect(cell.frame));

设置选中时的背景颜色可以用selectedbackgroundview设置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容