·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> UITbaleView上按钮的单选

UITbaleView上按钮的单选

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

设置Id属性,标记是哪个cell

@PRoperty (nonatomic,assign)NSInteger Id;

设置一个普通状态和选中状态图片不同的按钮

  _choose = [[UIButton alloc]init];
        [_choose setImage:[UIImage imageNamed:@"about_未勾选"] forState:UIControlStateNormal];
        [_choose setImage:[UIImage imageNamed:@"about_勾选"] forState:UIControlStateSelected];
        [_choose addTarget:self action:@selector(choosePressed:) forControlEvents:UIControlEventTouchUpInside];
        [self.contentView addSubview:_choose];
- (void)layoutSubviews {
    _choose.frame = CGRectMake(10, 120+wei_tiao, 20, 20);
}

设置一个可调整选中或者为选中的方法

- (void)setChecked:(BOOL)checked {
    if (checked) {
        _choose.selected = YES;
    }else {
        _choose.selected = NO;
    }
}

cell上按钮的单击事件

/**
 *  选择勾选
 *
 *  @param sender 按钮
 */
- (void)choosePressed:(UIButton *)sender {
    sender.selected = YES;
    if (_chooseBlock) {
        _chooseBlock(self.Id);
    }
}

设置一个全局变量来判定点了哪一个cell

    NSInteger _cellIndex;

 

tableView代理:- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ShippingAddressCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.Id = indexPath.row;
    if (_cellIndex == indexPath.row) {
        [cell setChecked:YES];
    }else {
        [cell setChecked:NO];
    }
    [cell setChooseBlock:^(NSInteger index) {
        _cellIndex = index;
        [_tableView reloadData];
    }];
    return cell;
}

效果图:

 

补:使用了block作为属性回调

1.申明block属性

@property (copy, nonatomic) void(^chooseBlock)(NSInteger index);

2.在本类里面调用

 if (_chooseBlock) {
        _chooseBlock(self.Id);
    }

3.使用block属性:

  [cell setChooseBlock:^(NSInteger index) {
        _cellIndex = index;
        [_tableView reloadData];
    }];