iOS 屏蔽父 View 的點擊手勢

新建一個 父view:A ,并且在這個 父view(A) 上添加點擊事件:tap;然后在 父view 上再添加子 view:(B).這時候點擊B的時候也會響應A 的點擊事件

  • 如果 子 view B 默認是關閉用戶交互狀態
    當 B 是類似于 UIImageView 這種默認關閉用戶交互的控件,這時候點擊 B 是不會有反應的.如果為 B 添加另一個點擊手勢:tap2.
// preView 
UIView *preView = [UIView  new];
UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapView)]; 
    [preView addGestureRecognizer:tap1];


UIImageView *imgView = [UIImageView new ];
[preView addsubview:imgView];
// 開啟 imgView 的手勢交互
imgView.userInteractionEnabled = YES;
// 然后imgView 添加點擊手勢 tap2,這時候  tap1 和 tap2是不會產生干擾的
  • 但是,更普遍的情況是:當子 view B 也會自動響應父 view 的響應事件
  1. 可以通過設置點擊手勢的代理方法,確定父view上的點擊手勢什么時候響應
  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapView)];
    tap.delegate = self;
 [self addGestureRecognizer:tap];
// tap 的代理方法
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    
    if ([touch.view isDescendantOfView:self.tbView]) {
        return NO;
    }
  
    if ([touch.view isKindOfClass:[UITextField class]]){
        return NO;
    }
    // 若為UITableViewCellContentView(即點擊了tableViewCell),則不截獲Touch事件
   // NSLog(NSStringFromClass([touch.view class]));
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }

    return YES;
}
  1. 對于布局簡單的父控件與子控件,可以設置父控件的點擊手勢的響應區域
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,581評論 25 708
  • 好奇觸摸事件是如何從屏幕轉移到APP內的?困惑于Cell怎么突然不能點擊了?糾結于如何實現這個奇葩響應需求?亦或是...
    Lotheve閱讀 58,158評論 51 603
  • 在iOS開發中經常會涉及到觸摸事件。本想自己總結一下,但是遇到了這篇文章,感覺總結的已經很到位,特此轉載。作者:L...
    WQ_UESTC閱讀 6,138評論 4 26
  • -- iOS事件全面解析 概覽 iPhone的成功很大一部分得益于它多點觸摸的強大功能,喬布斯讓人們認識到手機其實...
    翹楚iOS9閱讀 3,013評論 0 13
  • 《唐詩文化研究課》 一堂課,從未見到老師睜開眼睛滿臉堆積著笑容眉下一彎新月 課堂結束,以一首自寫小詩,回顧總結此講...
    張子默閱讀 394評論 0 2