最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS UIButton 點擊無響應的解決辦法

 更新時間:2017年12月22日 09:13:40   作者:calary  
在開發(fā)中按鈕我們經(jīng)常會遇到,但是有時候會碰到一些難以處理的問題,就是按鈕點擊無響應,其實解決方法也不難。下面小編之家小編抽空給大家介紹iOS UIButton 點擊無響應的解決辦法,需要的朋友參考下吧

前言

在日常開發(fā)中我們經(jīng)常和按鈕打交道,但是有時候會碰到比較難處理的問題,就是按鈕不響應點擊事件,這時候我們需要從下面幾方面排查

按鈕不響應的原因

1、按鈕添加到了一個沒有開啟用戶交互的父View上,例如UIImageView,這時候開啟父試圖的交互 view.userInteractionEnabled = YES

設為YES就可以解決問題

2、按鈕自身被遮擋,點擊的時候根本就沒有點擊到button,而是他上面一層View,自然就不會響應

這里有個看圖層的方法,下圖點擊那個紅框的按鈕就可以看到當前運行界面的UI元素,你可以看到有沒有view遮擋住button

3、按鈕的frame超出了父視圖的frame,這個是最容易出現(xiàn)的,按鈕的freme必須在父視圖的frame內(nèi)部點擊才有效,如下圖,按鈕點擊紅框里的區(qū)域是不響應的。

如果碰到這個問題怎么辦呢,請繼續(xù)往下看

解決超出點擊區(qū)域的問題

這種情況其實很有可能發(fā)生,舉個我碰到的栗子:聊天區(qū)域的高度小于鍵盤的高度,而輸入框是聊天區(qū)域的子View,在鍵盤彈出后,輸入框上移,而且超出了父視圖的frame,這個時候點擊紅框的按鈕切換表情鍵盤動作就不響應。

解決辦法

這里有兩個方法,每次有touch動作時,都會走這兩個方法

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

重寫方法 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

這是View里的一個方法,處理流程如下

  • 首先調(diào)用當前視圖的pointInside:withEvent:方法判斷觸摸點是否在當前視圖內(nèi);
  • 若返回NO,則hitTest:withEvent:返回nil;
  • 若返回YES,則向當前視圖的所有子視圖(subviews)發(fā)送hitTest:withEvent:消息,所有子視圖的遍歷順序是從top到bottom,即從subviews數(shù)組的末尾向前遍歷,直到有子視圖返回非空對象或者全部子視圖遍歷完畢;
  • 若第一次有子視圖返回非空對象,則hitTest:withEvent:方法返回此對象,處理結束;
  • 如所有子視圖都返回非,則hitTest:withEvent:方法返回自身(self)。
  • 最后,這個觸摸事件交給主窗口的hitTest:withEvent:方法返回的視圖對象去處理。

所以我們可以在返回nil時進行處理,因為這個時候button是在父View外的

//返回一個view來響應事件
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
 UIView *view = [super hitTest:point withEvent:event];
 if (view == nil){
  //轉換坐標
  CGPoint tempPoint = [self.testBtn convertPoint:point fromView:self];
  //判斷點擊的點是否在按鈕區(qū)域內(nèi)
  if (CGRectContainsPoint(self.testBtn.bounds, tempPoint)){
   //返回按鈕
   return _testBtn;
  }
 }
 return view;
}

這個時候按鈕在區(qū)域外點擊也有效果了

總結

以上所述是小編給大家介紹的iOS UIButton 點擊無響應的解決辦法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家的支持!

相關文章

最新評論

鸡西市| 双峰县| 祥云县| 乳山市| 胶南市| 桑日县| 闵行区| 西和县| 张家港市| 黑河市| 灵武市| 新宁县| 曲水县| 元朗区| 玛沁县| 陕西省| 介休市| 苍梧县| 綦江县| 泰和县| 彭水| 北票市| 新宁县| 缙云县| 丰宁| 青神县| 肥东县| 永修县| 信阳市| 清远市| 吐鲁番市| 广水市| 且末县| 额敏县| 迁西县| 界首市| 梁平县| 滨州市| 平南县| 凤台县| 泊头市|