我使用QuickDialog
在UITableView上使用自定义单元格在这个自定义单元格中,我有几个UILabel,UIImageView和一个按钮,它具有单元格大小并显示在其他子视图的顶部。
我希望这个按钮处理触摸envent并调用选择器。但即使按钮位于顶部位置,触摸子视图时触摸事件也不会触发。
- (UITableViewCell *)getCellForTableView:(QuickDialogTableView *)tableView controller:(QuickDialogController *)controller
{
UITableViewCell *cell = [super getCellForTableView:tableView controller:controller];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = cell.frame;
[btn setEnabled:YES];
[btn setExclusiveTouch:YES];
[btn setBackgroundColor:[UIColor blueColor]]; // To check if the button is at the top position
[btn setStringTag:labelIdText];
[btn addTarget:self action:@selector(handleTap:) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:label1];
[cell addSubview:label2];
[cell addSubview:image1];
[cell addSubview:image2];
[cell addSubview:btn];
cell.userInteractionEnabled = YES;
return cell;
}
选择器:
- (IBAction)handleTap:(id)sender
{
NSLog(@"CELL TAPPED : \n");
}
非常感谢。
编辑:
新版代码:
- (UITableViewCell *)getCellForTableView:(QuickDialogTableView *)tableView controller:(QuickDialogController *)controller
{
UITableViewCell *cell = [super getCellForTableView:tableView controller:controller];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UIView *top = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height)];
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[top setStringTag:labelIdText];
[top addGestureRecognizer:singleFingerTap];
[cell.contentView addSubview:label_1];
[cell.contentView addSubview:label_2];
[cell.contentView addSubview:image_1];
[cell.contentView addSubview:image_2];
[cell.contentView addSubview:top];
cell.userInteractionEnabled = YES;
image_1.userInteractionEnabled = YES;
image_2.userInteractionEnabled = YES;
return cell;
}
选择器:
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer
{
NSLog(@"CELL TAPPED : \n");
}
当我触摸UILabel中包含的文本时,事件处理。 但是,尽管userInteractionEnabled为图像设置为YES,它仍然无法与UIImageView一起使用。
再次感谢。
答案 0 :(得分:0)
您正在为按钮指定单元格框,然后将其添加到单元格本身。通过这种方式,按钮的位置不是您期望的位置,即使您可以看到按钮,它也不会响应触摸,因为它位于单元格边界之外。 试着改变这个:
btn.frame = cell.frame;
到此:
btn.frame = cell.bounds;
使用UItableViewCell时,请记住将子视图添加到其contentView而不是单元格本身:
[cell.contentView addSubview:aCustomView];