我希望创建一个自定义的表格单元,并在其中放置一个imageView。当用户点击imageView时,弹出一个视图在viewController上,并且该视图将知道哪个单元格中的图片被按下。
谢谢。
谢谢。
使用 UITapGestureRecognizer
手势来检测任何继承自 UIView
的视图的触摸。
按以下方式使用.....
将轻击手势 UITapGestureRecognizer
添加到 myImageView
视图(类型为 UIImageView
)中。
UITapGestureRecognizer *myTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureTapEvent:)];
myImageView.userInteractionEnabled = YES;
[myImageView addGestureRecognizer:myTapGesture];
[myTapGesture release];
实现gestureTapEvent:
方法以接收触摸事件。
-(void)gestureTapEvent:(UITapGestureRecognizer *)gesture
{
}
更新:
你可以通过访问UIGestureRecognizer
的view
属性来访问与手势相关联的视图。
@property(nonatomic, readonly) UIView *view;
你的`gestureTapEvent:`方法应该如下所示。
-(void)gestureTapEvent:(UITapGestureRecognizer *)gesture
{
UIImageView* myImageView = (UIImageView*)gesture.view ;
}
你有多种可能性:
例如:
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewClicked:)];
[cell.yourImageView addGestureRecognizer:gestureRecognizer];
[gestureRecognizer release];
[编辑]
然后,当您实现imageViewClicked
方法时,您可以使用GestureRecognizer的view
属性获取被点击的ImageView。从那里开始,您可以:
tableView:cellForRowAtIndexPath:
方法中设置了它),以检索标签并根据所设置的内容执行任何操作(例如,您可能已经在tableView:cellForRowAtIndexPath:
中设置了imageView.tag = indexPath.row
,然后再获取该indexPath行)示例:
-(void)imageViewClicked:(UITapGestureRecognizer*)gestRecognizer
{
UIImageView* iv = (UIImageView*)gestRecognizer.view;
NSInteger tag = iv.tag; // then do what you want with this
// or get the cell by going up thru the superviews until you find it
UIView* cellView = iv;
while(cellView && ![cellView isKindOfClass:[UITableViewCell class]])
cellView = cellView.superview; // go up until you find a cell
// Then get its indexPath
UITableViewCell* cell = (UITableViewCell*)cellView;
NSIndexPath* indexPath = [self.tableView indexPathForCell:cell];
}
你可以使用自定义的 UIButton 代替 UIImageView,并将相同的图像分配给按钮,然后你就能够获取该按钮的 touchUpInside 事件。只需将 button.tag = indexpath.row 分配给按钮,这样你就能知道哪个单元格的按钮被按下。
-(IBAction)ButtonPressed:(id)sender{
UIButton *btnSelected = sender;
switch(btnSelected.tag){
case: 0
///Cell 0's Button Pressed.
break;
......
......
}
要为UIImageView添加触摸事件,请在.m文件中使用以下格式
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(newTapMethod)];
[_imageButtonName setUserInteractionEnabled:YES];
[_imageButtonName addGestureRecognizer:newTap];
然后创建新的tap方法(或者你想起什么名字都可以)
-(void)newTapMethod{
//...
}
希望这能帮到你。