Ios 在UITableView自定义单元格中的元素上点击手势

Ios 在UITableView自定义单元格中的元素上点击手势,ios,uitableview,uibutton,Ios,Uitableview,Uibutton,这个话题已经被反复讨论过了,但是在两天的研究和尝试了所有建议的解决方案之后,我仍然不能做我想做的事情 首先,我正在使用故事板为iOS5创建一个应用程序 我有一个UITableViewController,有两种类型的单元格,一条原始消息,以及对它的一些回答。我在我的故事板中创建了我的表格,检查了原型单元格,设计了2个带有2或3个标签的单元格,一个文本视图和一个图像。然后,我用两个新类将UITableViewCell子类化,我称之为ThreadAlertCell和ThreadAnswerCell。

这个话题已经被反复讨论过了,但是在两天的研究和尝试了所有建议的解决方案之后,我仍然不能做我想做的事情

首先,我正在使用故事板为iOS5创建一个应用程序

我有一个UITableViewController,有两种类型的单元格,一条原始消息,以及对它的一些回答。我在我的故事板中创建了我的表格,检查了原型单元格,设计了2个带有2或3个标签的单元格,一个文本视图和一个图像。然后,我用两个新类将UITableViewCell子类化,我称之为ThreadAlertCell和ThreadAnswerCell。我为单元格的元素创建了属性,因此可以通过编程方式设置标签的文本和图像。像往常一样,我在故事板中将我的图形元素与它们的定义联系起来。在我的TableViewController的CellForRowatineXpath中,我创建单元格并填充它们。到目前为止,一切都显示正确,我希望它如何

但是,我想触摸一下手机的图像,弹出一个新的视图,显示用户的个人资料页面和另一个基本视图,我可以用performsgue来完成,没有问题

我已经尝试了很多东西,我不确定把所有细节都放在这里是否有用。在寻找答案的过程中,我明白,当你希望处理手势时,使用UIImageView并不是最好的方法。所以我把它改成了UIButton。但是我不能让触摸事件做任何事情

我只举一个应答单元的例子

这是我的ThreadAnswerCell头文件,我不会给出.m,这里没有什么有趣的内容:

@interface ThreadAnswerCell : UITableViewCell

@property (nonatomic) IBOutlet UILabel *senderLabel;
@property (nonatomic) IBOutlet UILabel *dateLabel;
@property (nonatomic) IBOutlet UITextView *contentTextView;
@property (nonatomic, weak) IBOutlet UIButton *senderButton;

@end
这是我的TableViewController中cellForRowAtIndexPath的一半,我对之前的消息也做了同样的处理:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"ThreadAnswerCell";
    ThreadAnswerCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
        cell = [[ThreadAnswerCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    Message *message = [threadArray objectAtIndex:indexPath.row];

    cell.senderLabel.text = [NSString stringWithFormat:@"%@", message.sender];
    cell.contentTextView.text = [NSString stringWithFormat:@"%@", message.content];
    cell.dateLabel.text = [NSString stringWithFormat:@"%@", message.date];
    //[cell.senderButton setBackgroundImage: [[UIImage alloc] initWithData: [NSData dataWithBase64EncodedString: message.userPic]]
    //                             forState: UIControlStateNormal];

    [cell.senderButton addTarget:self action:@selector(firstButtonSelected:) forControlEvents:UIControlEventTouchUpInside];

    CGRect frame = cell.contentTextView.frame;
    frame.size.height = cell.contentTextView.contentSize.height;
    cell.contentTextView.frame = frame;
    [cell.contentTextView sizeToFit];

    return cell;
}
如您所见,我使用我的自定义单元格,然后用内容填充它。我使用三个无用的stringWithFormat,但我有我的理由,lol,我尝试向我的按钮添加一个事件。我还对设置按钮背景图像以在屏幕上看到按钮的部分进行了注释

下面是我希望按钮调用的方法:

- (void)firstButtonSelected: (id)sender
{
    NSLog(@"hello");
}

但是,该方法从未被调用!任何关于我哪里出了错的想法或任何其他有效的解决方案都会很好!谢谢。

这是最上面的风景吗?确保将senderButton视图最后添加到单元格视图。
任何其他视图都可能被触碰。

它是最上面的视图吗?确保将senderButton视图最后添加到单元格视图。 任何其他视图都有可能被触碰。

您有没有 -voidtableView:UITableView*tableView didSelectRowatineXpath:NSIndexPath*indexPath

是否在tableview委托类中实现

我想,你的手机捕捉到了触摸事件。尝试删除该方法。和 cell.selectionStyle=ui表格视图cellselectionstyle无 -voidtableView:UITableView*tableView didSelectRowatineXpath:NSIndexPath*indexPath

是否在tableview委托类中实现

我想,你的手机捕捉到了触摸事件。尝试删除该方法。和
cell.selectionStyle=UITableViewCellSelectionStyleNone

是的,我的问题中有详细说明。我已经将原型单元格设置为非userInteractionEnabled,所以我认为这样做不会改变任何事情?呜呜,对不起,我读了cellForRowAtIndexPath。是的,我确实有didSelectRowAtIndexPath,但它是空的,因为我不想在触摸手机时进行任何操作。这是一个问题吗?它清楚地说明了为什么你没有接触事件。设置UserInteractionEnabled会使案例中的子视图按钮无法获取触摸事件。只需将其设置为“是”,并将单元格的选择样式设置为“无”。这很好。我真的认为我可以禁用单元格上的用户交互,并在任何子视图上启用它。。我错了!非常感谢你的回答。是的,我的问题中有详细说明。我已经将原型单元格设置为非userInteractionEnabled,所以我认为这样做不会改变任何事情?呜呜,对不起,我读了cellForRowAtIndexPath。是的,我确实有didSelectRowAtIndexPath,但它是空的,因为我不想在触摸手机时进行任何操作。这是一个问题吗?它清楚地说明了为什么你没有接触事件。设置UserInteractionEnabled会使案例中的子视图按钮无法获取触摸事件。只需将其设置为“是”,并将单元格的选择样式设置为“无”。这很好。我真的认为我可以禁用单元格上的用户交互,并在任何子视图上启用它。。我错了!非常感谢你的回答。嗯,我的按钮似乎没有重叠。事实上,我最后把它放在了我的手机上,所以我猜它在上面……嗯,似乎没有什么东西和我的按钮重叠。事实上,我最后把它添加到了我的手机中,所以我猜它在上面…我试着模拟你的代码,它工作得很好,试着把手机的代码贴在按钮的位置,看看你是否在那里出错。谢谢你的评论,Mert实际上发现了我的错误,它不在代码中,而是在我设计手机的故事板中,我故意禁用了用户交互,这
NK我只能为我的图像启用它。我尝试模拟你的代码,它工作得很好,尝试将单元格的代码张贴在按钮的位置,看看你是否在那里出错。感谢你的评论,Mert实际上发现了我的错误,它不在代码中,而是在我设计单元格的故事板中,我故意禁用了UserInteraction,认为我只能为我的图像启用它。