1

我使用 QuickDialog 在 UITableView 上使用自定义单元格

在这个自定义单元格中,我有几个 UILabel、UIImageView 和一个按钮,该按钮具有单元格大小并显示在其他子视图的顶部。

我想要这个按钮处理触摸事件并调用选择器。但即使按钮位于顶部位置,当我触摸子视图时,触摸事件也不会触发。

- (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。

再次感谢。

4

1 回答 1

0

它接缝您将单元格框架分配给按钮,然后将其添加到单元格本身。这样,按钮的位置就不是您所期望的,即使您可以看到按钮,它也不会响应触摸,因为它位于单元格边界之外。尝试改变这一点:

btn.frame = cell.frame;

对此:

btn.frame = cell.bounds;

此外,在使用 UItableViewCell 时,请记住将子视图添加到其 contentView 而不是单元格本身:

[cell.contentView addSubview:aCustomView];
于 2013-10-04T11:21:29.230 回答