在Iphone开发中,像UIimageView是不支持点击的,但往往我们却有很多能在Image上点击的需求,比如一个自定义的TableViewCell中放入三个UIimageView,在这里命名为imageleft,imagemiddle,imggeright,当tableView加载后,单击tableView中某一行中的image,我便进入该图片的详细页面。
当然,现在的最新版支持手势控件,只要拖一个这样的控件到UIImageView上,实现它的委托就可以了。若版本太低不支持这样的控件,你便只好老老实实的亲手写代码了。
- <span style="color:rgb(64,50,38)">#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 style="margin:0px; padding:0px">...
- @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];
- }
-
- </span><span style="color:#3366ff">- (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];
- }
- }</span><span style="color:#403226">
- <br style="margin:0px; padding:0px">#pragma mark -<br style="margin:0px; padding:0px">#pragma mark TableGridViewCellDelegate<br style="margin:0px; padding:0px">- (void) tapedImageViewInCell:(UITableViewCell*)cell withIndex:(int)index<br style="margin:0px; padding:0px">{<br style="margin:0px; padding:0px"> int row = [myTable indexPathForCell:cell].row;<br style="margin:0px; padding:0px"> VODItem *it = (VODItem*)[ipListarry objectAtIndex:row*3+index];<br style="margin:0px; padding:0px"> NSString *preview_Url = [[NSString alloc] initWithFormat:@"%@",it.Preview_Url];<br style="margin:0px; padding:0px"><br style="margin:0px; padding:0px"> IPCellDetailInfo *IPCellDetailInfoController = [[IPCellDetailInfo alloc]init];<br style="margin:0px; padding:0px"> IPCellDetailInfoController.ClipDetialsInterfaceUrl=it.ClipDetialsInterfaceUrl;<br style="margin:0px; padding:0px"> IPCellDetailInfoController.ClipDetialsTitle = it.Primary_Name;<br style="margin:0px; padding:0px"> IPCellDetailInfoController.btnPlayOrViewTitle = it.Sndlvl_Desc;<br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> [self.navigationController pushViewController:IPCellDetailInfoController animated:YES]; //新视图压入到栈中<br style="margin:0px; padding:0px"> [IPCellDetailInfoController release];<br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> NSLog(@"row = [%d], col = [%d], Preview_Url = [%@]", row, index,preview_Url);<br style="margin:0px; padding:0px"> [preview_Url release];<br style="margin:0px; padding:0px">}
- @end
- </span>
好了 其实主要就是要会使用UITapGestureRecognizer,当然这只是手势的其中一个。下面还有几个如:
-
UITapGestureRecognizer
-
UIPinchGestureRecognizer
-
UIRotationGestureRecognizer
-
UISwipeGestureRecognizer
-
UIPanGestureRecognizer
-
UILongPressGestureRecognizer
从命名上不难了解這些类別所对应代表的手势,分別是 Tap(点一下)、Pinch(二指往內或往外拨动)、Rotation(旋转)、Swipe(滑动,快速移动)、Pan (拖移,慢速移动)以及 LongPress(长按)。
比如一个很简单的开关实现,使用UIImageView的手势来实现,这种情况一般加在TableViewCell里面很好用
-(void)handleTap:(id)sender{
UITapGestureRecognizer *tap = sender;
UIImageView *imgView = (UIImageView*)tap.view;
[imgView setHighlighted:!imgView.highlighted];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
{
...
[imgView setImage:[UIImage imageNamed:@"on.png"]];
[imgView setHighlightedImage:[UIImage imageNamed:@"off.png"]];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTap:)];
[imgView addGestureRecognizer:tap];
[imgView setUserInteractionEnabled:YES];
[self.view addSubview:imgView];
}
|