----- 多选:
@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];
网友评论