在我的iPhone应用程序中,我通过继承UITableView
使用自定义表格单元格UITableViewCell
。我们假设我的自定义单元类名称为 ItemTableViewCell 。相关的 ItemTableViewCell.xib 的子视图为UIView
,其名称为 infoView 。
我希望 infoView 识别单击/触摸它。如果它只是一个点击,我可以通过使用故事板添加UITapGestureRecognizer
并为此设置一个动作方法来实现。但我需要的是在识别infoView的点击/触摸时,我需要将相关的表行信息传递给目标方法/选择器。
如果我进一步解释这种情况,UITableView
由NSArray
UITableViewCell
组成。该自定义单元格的底栏带有一个名为 infoView 的子视图。通过点击/触摸 infoView ,它应该调用一个方法,并将相关的NSArray元素作为参数。通过点击/触摸单元格的其余部分,它应该正常调用didSelectRowAtIndexPath
方法。
答案 0 :(得分:4)
我找到了解决方案。当我正在创建自定义单元格时,我将UITapGestureRecognizer添加到相关的UIVIew(在我的情况下是infoView),如下所示。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedOnInfoView:)];
[tap setNumberOfTouchesRequired:1];
[tap setNumberOfTapsRequired:1];
[cell.infoView addGestureRecognizer:tap];
[cell.infoView setUserInteractionEnabled:YES];
[cell.infoView setTag:realIndex];
从最后一行可以看出,我将单元格索引而不是单元格数据传递给选择器,选择器将在识别轻击手势后触发。
同时我维护一个NSMutableArray来存储单元格的数据。您可以理解,每个单元格索引都会同时存在NSArray元素。
这是我的选择器出现的方式;
- (void)tappedOnInfoView:(UIGestureRecognizer *)sender {
通过使用以下代码,您可以获得与点击发生的客人相关的索引
sender.view.tag
使用以下代码片段我可以获取我存储在NSMutableArray中的单元格的详细信息
[myMutArray objectAtIndex:sender.view.tag];
完成任务:)
答案 1 :(得分:0)
在Tableview SuperClass中实现手势操作。或者您可以在UITableViewCell子类中使用自定义委托。在UITableView子类中声明一个协议。
@protocol customCellDelegate <NSObject>
@required
-(void)selectedCellInIndexPath : (NSIndexPath *)indexpath;
@end
在UITableView子类
中设置此属性@property (nonatomic, strong)NSIndexPath *indexpath;
@property (nonatomic, strong) id <customCellDelegate> delegate;
然后在您的UITableView子类手势操作中添加此行
if(self.delegate){
[self.delegate selectedCellInIndexPath: self.indexpath];
}
在tableview数据源方法
中- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
实施此代码
cell.delegate = (id)self;
cell.indexpath = indexPath;
在Uitableview超级类中只需实现此方法
-(void)selectedCellInIndexPath : (NSIndexPath *)indexpath{
//display uiimagepickercontroller modally or anything else here
}