给控件添加单击事件--UITapGestureRecognizer
在Iphone开发中,像UIimageView是不支持点击的,但往往我们却有很多能在Image上点击的需求,比如一个自定义的TableViewCell中放入三个UIimageView,在这里命名为imageleft,imagemiddle,imggeright,当tableView加载后,单击tableView中某一行中的image,我便进入该图片的详细页面。
当然,现在的最新版支持手势控件,只要拖一个这样的控件到UIImageView上,实现它的委托就可以了。若版本太低不支持这样的控件,你便只好老老实实的亲手写代码了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #import <UIKit/UIKit.h> @protocol TableGridViewCellDelegate; @interface TableGridViewCell : UITableViewCell { } @property ( nonatomic ,retain) IBOutlet UIImageView *imageleft; @property ( nonatomic ,retain) IBOutlet UIImageView *imagemiddle; @property ( nonatomic ,retain) IBOutlet UIImageView *imageright; @property ( nonatomic ,assign) id <TableGridViewCellDelegate> delegate; ... - ( void ) configGesture; - ( void ) handTap:(UITapGestureRecognizer*) gesture;<br>... @end @protocol TableGridViewCellDelegate < NSObject > - ( void ) tapedImageViewInCell:(UITableViewCell*)cell withIndex:( int )index; @end //m文件 #import "TableGridViewCell.h" @implementation TableGridViewCell @synthesize imageleft,imagemiddle,imageright,delegate; - ( id )initWithStyle:(UITableViewCellStyle)style reuseIdentifier:( NSString *)reuseIdentifier { self = [ super initWithStyle:style reuseIdentifier:reuseIdentifier]; if ( self ) { // Initialization code } return self ; } - ( void )setSelected:( BOOL )selected animated:( BOOL )animated { [ super setSelected:selected animated:animated]; // Configure the view for the selected state } -( void ) dealloc{ SAFE_RELEASE(imageleft); SAFE_RELEASE(imagemiddle); SAFE_RELEASE(imageright); [ super dealloc]; } - ( void ) configGesture { UITapGestureRecognizer *_left = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector (handTap:)]; [imageleft addGestureRecognizer:_left]; SAFE_RELEASE(_left); UITapGestureRecognizer *_mid = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector (handTap:)]; [imagemiddle addGestureRecognizer:_mid]; SAFE_RELEASE(_mid); UITapGestureRecognizer *_right = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector (handTap:)]; [imageright addGestureRecognizer:_right]; SAFE_RELEASE(_right); } - ( void ) handTap:(UITapGestureRecognizer*) gesture { if ([delegate respondsToSelector: @selector (tapedImageViewInCell:withIndex:)]) { UIImageView *v = (UIImageView*)gesture.view; [delegate tapedImageViewInCell: self withIndex:v.tag]; } } <br>#pragma mark -<br>#pragma mark TableGridViewCellDelegate<br>- ( void ) tapedImageViewInCell:(UITableViewCell*)cell withIndex:( int )index<br>{<br> int row = [myTable indexPathForCell:cell].row;<br> VODItem *it = (VODItem*)[ipListarry objectAtIndex:row*3+index];<br> NSString *preview_Url = [[ NSString alloc] initWithFormat:@ "%@" ,it.Preview_Url];<br><br> IPCellDetailInfo *IPCellDetailInfoController = [[IPCellDetailInfo alloc]init];<br> IPCellDetailInfoController.ClipDetialsInterfaceUrl=it.ClipDetialsInterfaceUrl;<br> IPCellDetailInfoController.ClipDetialsTitle = it.Primary_Name;<br> IPCellDetailInfoController.btnPlayOrViewTitle = it.Sndlvl_Desc;<br> <br> [ self .navigationController pushViewController:IPCellDetailInfoController animated: YES ]; //新视图压入到栈中<br> [IPCellDetailInfoController release];<br> <br> NSLog(@"row = [%d], col = [%d], Preview_Url = [%@]", row, index,preview_Url);<br> [preview_Url release];<br>} @end |
好了 其实主要就是要会使用UITapGestureRecognizer,当然这只是手势的其中一个。下面还有几个如:
- UITapGestureRecognizer
- UIPinchGestureRecognizer
- UIRotationGestureRecognizer
- UISwipeGestureRecognizer
- UIPanGestureRecognizer
- UILongPressGestureRecognizer
从命名上不难了解這些类別所对应代表的手势,分別是 Tap(点一下)、Pinch(二指往內或往外拨动)、Rotation(旋转)、Swipe(滑动,快速移动)、Pan (拖移,慢速移动)以及 LongPress(长按)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构