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

Joe*_*ell 4 cocoa-touch objective-c uitableview uiview

我在tableView Cell中有一个按钮,我需要响应触摸事件.通常情况下,这很容易解决

    [cell.playButton addTarget:self action:@selector(playButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

在-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];
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

乔尔

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

谢谢你的期待!

jrt*_*ton 9

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

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

我认为userInteractionEnabled在这种情况下,要么级联到子视图,要么超级视图不会将触摸传递给其子视图,因此您的按钮将不会接收到触摸.设置你的图像视图.userInteractionEnabled = YES,你应该没事.