中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS中UIButton點擊無響應怎么辦

發布時間:2021-07-09 09:29:23 來源:億速云 閱讀:469 作者:小新 欄目:移動開發

這篇文章主要為大家展示了“iOS中UIButton點擊無響應怎么辦”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“iOS中UIButton點擊無響應怎么辦”這篇文章吧。

前言

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

按鈕不響應的原因

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

設為YES就可以解決問題

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

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

iOS中UIButton點擊無響應怎么辦

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

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

iOS中UIButton點擊無響應怎么辦

解決超出點擊區域的問題

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

iOS中UIButton點擊無響應怎么辦

解決辦法

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

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

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

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

  • 首先調用當前視圖的pointInside:withEvent:方法判斷觸摸點是否在當前視圖內;

  • 若返回NO,則hitTest:withEvent:返回nil;

  • 若返回YES,則向當前視圖的所有子視圖(subviews)發送hitTest:withEvent:消息,所有子視圖的遍歷順序是從top到bottom,即從subviews數組的末尾向前遍歷,直到有子視圖返回非空對象或者全部子視圖遍歷完畢;

  • 若第一次有子視圖返回非空對象,則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];
  //判斷點擊的點是否在按鈕區域內
  if (CGRectContainsPoint(self.testBtn.bounds, tempPoint)){
   //返回按鈕
   return _testBtn;
  }
 }
 return view;
}

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

以上是“iOS中UIButton點擊無響應怎么辦”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屏南县| 恩平市| 措美县| 台中县| 禄劝| 潼关县| 丰顺县| 虹口区| 太谷县| 南木林县| 苍南县| 临夏县| 若羌县| 大田县| 金沙县| 翁牛特旗| 若尔盖县| 花莲县| 阜康市| 牟定县| 客服| 通道| 花垣县| 镇安县| 平南县| 北碚区| 桦南县| 蒙山县| 淅川县| 海宁市| 雅安市| 天长市| 隆德县| 海阳市| 宝清县| 疏附县| 广饶县| 洛隆县| 泾源县| 凉城县| 许昌市|