1. 程式人生 > >手勢同UI控制元件事件的衝突

手勢同UI控制元件事件的衝突

在使用中,我們會發現當收拾和UI控制元件共同存在的時候,系統會先去響應手勢事件,而這會給我們帶來很大的麻煩。
比如我們有一個 tableView,作為一個類似微信的點選加號彈出的選單,tableView 新增在 一個背景檢視上,我麼給背景檢視新增一個tap 事件,使點選背景選單消失。這時候我們會發現tableView cell的點選delegate不會呼叫,就是因為事件被 手勢遮蔽了。這時候我們需要通過手勢的delegate 進行處理

加入手勢的委託

@interface FLMenuView ()<UITableViewDelegate, UITableViewDataSource,UIGestureRecognizerDelegate>
{

手勢初始化 delegate = self;

        UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
        tap.delegate = self;
        [self addGestureRecognizer:tap];

實現手勢的這個委託方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

    if
([touch.view isKindOfClass:[self class]]){ return YES; } return NO; }

如果點選的檢視是背景檢視,則返回Yes,響應手勢,否則響應其他。這個可以根據個人需要進行調整!