当它是UITableViewCell内部视图的子视图时,按钮在UITableViewCell子类中不起作用

时间:2012-02-14 05:40:41

标签: objective-c cocoa-touch uiview uitableview

我在tableView Cell中有一个按钮,我需要响应触摸事件。通常这可以通过

轻松解决
    [cell.playButton addTarget:self action:@selector(playButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

在-tableView:cellForRowAtIndexPath:

我遇到的问题是我的按钮位于自定义UITableViewCell子类中,也是我在该类中创建的视图的子视图..

例如:

    UIView *view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    self.theView = view;
    [self addSubview:view];
    [view release];


    UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom];
    playButton.frame = CGRectMake(5, 5, 100, 30);
    [playButton setImage:[UIImage imageNamed:@"button_playvid.png"] forState:UIControlStateNormal];
    [playButton setImage:[UIImage imageNamed:@"button_playvid_active.png"] forState:UIControlStateHighlighted];
    self.playButton = playButton;
    [self.theView addSubview:playButton];

当按钮是我在自定义UITableViewCell中创建的视图的子视图时,单元格突出显示而不是按下按钮,因此我在-tableView:cellForRowAtIndexPath中设置的目标永远不会被调用。不确定为什么......有什么帮助吗?

谢谢,

乔尔

PS。我意识到创建一个完全像这样的背景视图可能没有实际的理由,因为已经存在一个。这只是我用来解释我遇到的问题的示例代码..:D

感谢您的期待!

3 个答案:

答案 0 :(得分:9)

你要添加的UIView实际上是一个UIImageView。来自文档:

  

默认情况下,新图像视图对象配置为忽略用户事件。如果要处理UIImageView的自定义子类中的事件,则必须在初始化对象后显式将userInteractionEnabled属性的值更改为YES。

我认为userInteractionEnabled级联到子视图或者超级视图在这种情况下不会将触摸传递给其子视图,因此您的按钮将不会接收到触摸。将图片视图设置为.userInteractionEnabled = YES,您应该没问题。

答案 1 :(得分:1)

我有同样的问题,并尝试了一切。最终做到的是实现方法

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

只需返回自定义单元格的高度(查看NIB文件)

答案 2 :(得分:0)

您可以尝试使用相同的图像代替按钮。您可以定义单击图像时要调用的方法。