0

这个话题已经被一遍又一遍地讨论过了,但是经过两天的研究和尝试了所有建议的解决方案,我仍然无法做我想做的事。

首先,我正在使用情节提要为 iOS 5 创建一个应用程序。

我有一个 UITableViewController,有 2 种类型的单元格(一个原始的“消息”和一些“答案”)。我在情节提要中创建了表格,检查了“原型单元格”,用我的 2 个或 3 个标签、一个 textView 和一个图像设计了 2 个单元格。然后,我UITableViewCell使用 2 个新类进行子类化,我称之为ThreadAlertCellThreadAnswerCell。我为单元格的元素创建了属性,因此我可以以编程方式设置标签和图像的文本。我像往常一样将我的图形元素与它们在情节提要中的定义联系起来。在我的 TableViewController 中cellForRowAtIndexPath,我创建了单元格并填充它们。到目前为止一切顺利,一切都正确显示以及我想要的方式。

但是,我想要一个单元格图像上的“触摸”,弹出一个新视图,显示用户的个人资料页面(另一个基本视图,我可以使用 performSegue 来完成,这没问题)。

我已经尝试了很多东西,我不确定在这里详细介绍所有内容是否很有用。在寻找答案时,我了解到UIImageView在您期望处理手势时使用 a 并不是最好的方法。所以我把它改成了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

这是cellForRowAtIndexPath我的TableViewController的一半(在那之前我对“消息”做了同样的事情):

- (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的,但我有我的理由,哈哈),我尝试向我的按钮添加一个事件。我还评论了我将按钮的背景图像设置为“看到”屏幕上的按钮的部分。

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

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

但是,该方法永远不会被调用!关于我哪里出错或任何其他可行解决方案的任何想法都会很棒!谢谢。

4

2 回答 2

3

你有 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

在您的 tableview 委托类中实现?

我认为,您的单元格捕获了触摸事件。尝试删除该方法。和 cell.selectionStyle = UITableViewCellSelectionStyleNone

于 2012-08-21T08:57:19.523 回答
0

是最顶层的景色吗?确保最后将 senderButton 视图添加到单元格视图中。任何其他视图都可能被触及。

于 2012-08-21T08:51:58.773 回答