美文网首页
UITableView 之row的多选与单选

UITableView 之row的多选与单选

作者: 91阿生 | 来源:发表于2016-08-26 10:29 被阅读1318次

----- 多选:

@property(nonatomic,strong) NSMutableArray *selectIndexPaths; //定义一个可以存被点击后的indexpath的可变数组 
@property(nonatomic,strong) NSIndexPath *selectPath;  //存放被点击的哪一行的标志

/*/ 为可变数组开辟空间,这里我就不写了

- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
 {
     if([self.selectIndexPaths containsObject:indexPath]) //在NSMutableArray中用(bool)类型的containsObject判断这个对象是否存在这个数组中(判断的是内存地址)contains:包含
    {
         //存在以选中的,就执行(为真就执行)把存在的移除                 
         [self.selectIndexPaths removeObject:indexPath];  //把这个cell的标记移除
    } else//不存在这个标记,那点击后就添加到这个数组中
    {
         [self.selectIndexPaths addObject:indexPath];
    }
   [tableViewreloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationFade];//重新刷新这行
}

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{  //在这个方法中补上一段带(重用机制)
     if([self.selectIndexPaths containsObject:indexPath]) //如果这个数组中有当前所点击的下标,那就标记为打钩
   {
       cell.accessoryType=UITableViewCellAccessoryCheckmark;
   } else {
       cell.accessoryType=UITableViewCellAccessoryNone;
   }
}

----- 单选:

- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    int newRow = (int)indexPath.row;
    int oldRow = (int)(_selectPath != nil) ? (int)_selectPath.row : -1;

    if(newRow !=  oldRow) { //selectedButton : 我这里是cell中得一个按钮属性
        AlterSelectedTableViewCell *newCell = (AlterSelectedTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
        newCell.selectedButton.selected=YES; //yes:打勾状态
        
        AlterSelectedTableViewCell *oldCell = (AlterSelectedTableViewCell *)[tableView cellForRowAtIndexPath:_selectPath]; //当_selectPath为-1时,返回cell == nil
        oldCell.selectedButton.selected = NO; //no:取消打勾
       _selectPath= [indexPath copy];//一定要这么写,要不报错
     }
}

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{ //这个就和多选差不多了
    //重用机制,如果选中的行正好要重用
    if(_selectPath== indexPath)
   {
         cell.selectedButton.selected=YES;
   } else {
         cell.selectedButton.selected=NO;
}

这里如果要默认选中第一个row 可以再一开始就附上这段代码

//默认进来就选中第一条

NSIndexPath *defaultIndexPath = [NSIndexPathindexPathForRow:0 inSection:0];

[self tableView:_tableView didSelectRowAtIndexPath:defaultIndexPath];

相关文章

网友评论

      本文标题:UITableView 之row的多选与单选

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