我有一个自定义UITableViewCell
(MyCell),其中包含UIButton
和另一个自定义单元格。我想以编程方式选择用户已点击UIButton
的单元格。实际上我可以在按钮点击时调用方法,但不能选择单元格。我错过了什么?它不会崩溃,它会运行,但是除了NSLog之外,这段代码不会进行任何更改。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([object[@"num"] isEqualToString:@"one"]) {
MyCustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
//... cell display
cell.acceptLabel.tag = indexPath.row;
[cell.acceptLabel addTarget:self action:@selector(didTapBttn:) forControlEvents:UIControlEventTouchUpInside];
return cell;
} else {
MyCustomTableViewCellB *cellMessage = [tableView dequeueReusableCellWithIdentifier:@"cell2" forIndexPath:indexPath];
//... cell display
return cellMessage;
}
}
//1. version
- (void)didTapBttn:(id)sender {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:
UITableViewScrollPositionNone];
NSLog(@"button tapped");
}
// 2. version
- (void)didTapBttn:(id)sender {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:indexPath];
NSLog(@"button tapped");
}
答案 0 :(得分:1)
为什么不在电池组内
-(void)awakeFromNib
{
//other code...
self.button.userInteractionEnabled = NO;
}
点击将通过响应者链传递到单元格。
答案 1 :(得分:0)
好吧,假设你确定cell.acceptLabel
是一个UIButton(按钮的奇怪名称),并且if语句在你的情况下是真的:那么就可以说你的第一个版本应该是正确的,除了你使用错误的indexPath。您确实将单元格的indexPath.row指定为按钮的标记(非常好)。但是你为什么不用它?
- (void)didTapBttn:(id)sender {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:((UIButton *)sender).tag inSection:0];
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
NSLog(@"button tapped");
}
试试这个:)
PS:你应该重新考虑你的方法背后的意义。选择一个tableview单元格通常是通过点击一个单元格来完成的。