美文网首页iOS DeveloperiOS开发
UITableViewCell 设置单元格选中后只显示一个打勾的

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

作者: JakieZhang | 来源:发表于2016-11-10 10:47 被阅读455次

    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设置

    相关文章

      网友评论

        本文标题:UITableViewCell 设置单元格选中后只显示一个打勾的

        本文链接:https://www.haomeiwen.com/subject/sdtxpttx.html