这个主题已被反复讨论,但经过两天的研究和尝试所有建议的解决方案后,我仍然无法做我想做的事。
首先,我正在使用storyboard为iOS 5创建一个应用程序。
我有一个UITableViewController,有两种类型的单元格(原始“消息”,以及一些“答案”)。我在故事板中创建了我的表,检查了“原型单元格”,设计了2个带有2或3个标签的单元格,textView和图像。然后,我将UITableViewCell
子类化为2个新类,我称之为ThreadAlertCell
和ThreadAnswerCell
。我为单元格的元素创建了属性,因此我可以以编程方式设置标签和图像的文本。我像往常一样将我的图形元素链接到故事板中的定义。在我的TableViewController中,在cellForRowAtIndexPath
中,我创建了单元格并填充它们。到目前为止一切都很好,一切都正确显示,我想要它。
但是,我希望对单元格的图像进行“触摸”,弹出一个新视图,显示用户的个人资料页面(另一个基本视图,我可以使用performSegue执行此操作,没有问题)。
我已经尝试了很多东西,我不确定在这里详细介绍一切是非常有用的。在寻找答案时,我明白当你期望处理手势时使用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
但我有我的理由,哈哈),我尝试向我的按钮添加一个事件。我还评论了设置按钮背景图像的部分,以“看到”屏幕上的按钮。
这是我希望按钮调用的方法:
- (void)firstButtonSelected: (id)sender
{
NSLog(@"hello");
}
但是,永远不会调用该方法!关于我出错的地方或任何其他工作解决方案的任何想法都会很棒!感谢。
答案 0 :(得分:3)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
在tableview委托类中实现了吗?
我认为,你的细胞会抓住触摸事件。尝试删除该方法。和
cell.selectionStyle = UITableViewCellSelectionStyleNone
答案 1 :(得分:0)
这是最顶级的观点吗?确保将senderButton视图最后添加到单元格视图中。 任何其他观点都可能被触及。