大家都知道tableview的复用当然不知道的话可以个我留言或者在网上找 在这我就不多说了;
红色就是选中状态,但是这时候我们会发现往下拉当cell消失后出来新的cell中的button也是选中状态。话不多说下面上解决方法的代码!
-(NSMutableArray *)boolArr{
//创建一个数组在这里数组中的NSNumber对象的下标是于 indexPath一一对应的这里我给他一百个根据自身的情况赋值
if (_boolArr==nil) {
NSMutableArray *arr = [NSMutableArray array];
for (int i=0; i<100; i++) {
NSNumber *aNumber = [NSNumber numberWithInteger:100];//在这里给aNumber赋值100 也就是数组中有100个,值为100的NSNumber的对象 ,在这里注意我是通过改变aNumber来标示button是否为选中状态。
[arr addObject:aNumber];
}
_boolArr = arr;
}
return _boolArr;
}
//////////
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
//每区的行数
return 100;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
TableViewCell1 *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];//初始化cell
__block ViewController *vc = self;
UIButton *but = (UIButton *)[cell viewWithTag:100];//得到cell的button
//用block进行传值
cell.block = ^(){
// 取出cell的indexPath.row 对应bollArr下标的值
NSNumber *bo= vc.boolArr[indexPath.row];
// 更改bo的值用
bo = [NSNumber numberWithInteger:1];
//然后替换bollArr原先的值
[vc.boolArr replaceObjectAtIndex:indexPath.row withObject:bo];
//把but的选中状态变为yes
but.selected = YES;
};
//用这个方法来判断but是否为选中状态
[self addSelected:but addIndexPath:indexPath.row];
return cell;
}
-(void)addSelected:(UIButton *)sender addIndexPath:(NSInteger)indexPath{
//取出于cell的row对应的self.bollArr中的值
NSNumber *bo= self.boolArr[indexPath];
//然后转化为NSInteger类型
NSInteger bollTge = bo.integerValue;
//然后判断值是否被更改
//100 没有被更改 no
//1 已被修改 yes
if (bollTge==100) {
sender.selected = NO;
}else{
sender.selected = YES;
}
}
因为时间原因我并没有写取消选中状态的方法 只需要写一个boll值进行判断就可以了 希望可以帮助大家 我也是ios的初学者
如果大家有什么更简便的方法 在这里真心求教
本人qq:627400364 真心寻找和我一样走在编程这个不归路的朋友 让我们互帮互助 嗯~~~痛并快乐着 哈哈