UITbaleView上按鈕的單選,uitbaleview單選
設定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]; }];