需求:在同一個(gè)cell上響應(yīng)單擊和雙擊方法,分別進(jìn)入不同方法。
在視圖上同時(shí)識別單擊手勢和雙擊手勢的問題在于,當(dāng)檢測到一個(gè)單擊操作時(shí),無法確定是確實(shí)是一個(gè)單擊操作或者只是雙擊操作中的第一次點(diǎn)擊。解決這個(gè)問題的方法就是:在檢測到單擊時(shí),需要等一段時(shí)間等待第二次點(diǎn)擊,如果沒有第二次點(diǎn)擊,則為單擊操作;如果有第二次點(diǎn)擊,則為雙擊操作。
檢測手勢有兩種方法,一種是定制子視圖,重寫視圖從UIResponder類中繼承來的事件處理方法,touchesBegan:withEvent:等一系列方法來檢測手勢;另一個(gè)方法是使用手勢識別器,即UIGestureRecognize的各種具體子類。
//在cell上添加 bgView,給bgView添加兩個(gè)手勢檢測方法
bgView.userInteractionEnabled = YES;
UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];
singleTapGesture.numberOfTapsRequired =1;
singleTapGesture.numberOfTouchesRequired =1;
[bgView addGestureRecognizer:singleTapGesture];
UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapGesture.numberOfTapsRequired =2;
doubleTapGesture.numberOfTouchesRequired =1;
[bgView addGestureRecognizer:doubleTapGesture];
//只有當(dāng)doubleTapGesture識別失敗的時(shí)候(即識別出這不是雙擊操作),singleTapGesture才能開始識別
[singleTapGesture requireGestureRecognizerToFail:doubleTapGesture];
//兩個(gè)手勢分別響應(yīng)的方法
-(void)handleSingleTap:(UIGestureRecognizer *)sender{
//chooseNum為手勢響應(yīng)的view的tag值
chooseNum=(int)sender.view.tag;
CGPoint touchPoint = [sender locationInView:self];
}
-(void)handleDoubleTap:(UIGestureRecognizer *)sender{
//chooseNum為手勢響應(yīng)的cell的tag值
chooseNum=(int)sender.view.tag;
UITableViewCell *v = (UITableViewCell *)[[sender view] superview];
chooseNum=v.tag;
}
參考文章地址 :
http://www.voidcn.com/blog/Dancer2015/article/p-5957064.html