按钮在UITableViewCell里面是一个视图的子视图时不能在UITableViewCell子类中工作

问题描述:

在tableView单元中有一个按钮,我需要响应触摸事件。的cellForRowAtIndexPath:通常情况下,这将很容易被按钮在UITableViewCell里面是一个视图的子视图时不能在UITableViewCell子类中工作

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

-tableView内解决

我遇到的问题是,我的按钮是一个自定义的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]; 

当按钮是第I内创建视图的子视图e定制UITableViewCell,那么单元格会突出显示,而不是按下按钮,因此我在-tableView:cellForRowAtIndexPath中设置的目标从不会被调用。不知道为什么..任何帮助?

感谢,

乔尔

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

感谢您的期待!

+0

用“playButtonPressed:”方法实现编辑您的问题。 – Krishna 2012-02-14 05:46:48

+1

你是说你正在你的视图控制器中创建一个UIButton,并将它作为视图控制器视图的子视图并添加到uitableview的一个单元中(它也被添加到相同视图控制器的视图中)?这不可能是一个好主意... – MGA 2012-02-14 05:49:37

+0

添加您的按钮到您的新[查看addSubview:playButton] – Hiren 2012-02-14 06:06:36

您要添加的UIView实际上是一个UIImageView。从文档:

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

我认为,要么userInteractionEnabled级联到子视图或上海华将无法通过触摸到它的子视图在这种情况下,让你的按钮将不会被接受的一面。设置你的图像视图有.userInteractionEnabled = YES,你应该没问题。

+0

它的作品!谢谢你的帮助!!很高兴我在创建示例代码时不小心将它保留为UIImageView哈哈。 – 2012-02-14 07:33:36

+0

没问题。顺便说一下,这是一个完美形成的问题 - 清晰的例子,易于复制,所有信息存在,自我包含 - 继续保持! – jrturton 2012-02-14 08:07:22

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

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

只返回无论高度是你的自定义单元格(在NIB文件看)

+0

感谢您发布此提示。我有同样的问题,并检查了所有的视图'userInteractionEnabled''属性设置了正确的次数比我想承认。 原来我重写了''tableView:heightForRowAtIndexPath:''并且由于某种未知的原因返回0。 – Col 2015-04-03 12:37:18

取而代之的按钮,你可以尝试用图像相同。您可以定义在单击图像时调用哪个方法。