UITableView设置单元格选中后只显示一个打勾的三种简单方法(仅供参考)

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

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

  current=indexPath.row;

}

- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(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;

}

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

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

{

    current=indexPath.row; 

   [self.tableView reloadData];

}

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

{

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

   {

      returnUITableViewCellAccessoryCheckmark;

   }

   else

   {

  returnUITableViewCellAccessoryNone;

   }

}

或者直接在

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

单元格的默认高度为44

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

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

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

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

{

      NSArray *array =[tableViewvisibleCells];

    for (UITableViewCell *cell in array) {

       [cellsetAccessoryType:UITableViewCellAccessoryNone];

      cell.textLabel.textColor=[UIColorblackColor];

    }

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

   cell.textLabel.textColor=[UIColorblueColor];

   [cell setAccessoryType:UITableViewCellAccessoryCheckmark];

}

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

-(void)tableView:(UITableView *)tableViewwillDisplayCell:(UITableViewCell *)cellforRowAtIndexPath:(NSIndexPath *)indexPath

{

   NSIndexPath *index=[tableView indexPathForSelectedRow];

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

       {

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

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

       }

       else

       {

         cell.backgroundColor=[UIColor clearColor];

         cell.textLabel.textColor=[UIColor blackColor];

       }

}

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

NSIndexPath*index=[tableViewindexPathForSelectedRow];

NSComparisonResult result=[indexPathcompare:index];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hbblzjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值