欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS UIButton 點(diǎn)擊無響應(yīng)的解決辦法

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

前言

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

按鈕不響應(yīng)的原因

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

設(shè)為YES就可以解決問題

2、按鈕自身被遮擋,點(diǎn)擊的時(shí)候根本就沒有點(diǎn)擊到button,而是他上面一層View,自然就不會(huì)響應(yīng)

這里有個(gè)看圖層的方法,下圖點(diǎn)擊那個(gè)紅框的按鈕就可以看到當(dāng)前運(yùn)行界面的UI元素,你可以看到有沒有view遮擋住button

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

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

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

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

解決辦法

這里有兩個(gè)方法,每次有touch動(dòng)作時(shí),都會(huì)走這兩個(gè)方法

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

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

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

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

所以我們可以在返回nil時(shí)進(jìn)行處理,因?yàn)檫@個(gè)時(shí)候button是在父View外的

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

這個(gè)時(shí)候按鈕在區(qū)域外點(diǎn)擊也有效果了

總結(jié)

以上所述是小編給大家介紹的iOS UIButton 點(diǎn)擊無響應(yīng)的解決辦法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家的支持!

相關(guān)文章

  • Android中EditText如何去除邊框添加下劃線

    Android中EditText如何去除邊框添加下劃線

    這篇文章主要介紹了Android中EditText如何去除邊框添加下劃線的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Android游戲開發(fā)學(xué)習(xí)②焰火綻放效果實(shí)現(xiàn)方法

    Android游戲開發(fā)學(xué)習(xí)②焰火綻放效果實(shí)現(xiàn)方法

    這篇文章主要介紹了Android游戲開發(fā)學(xué)習(xí)②焰火綻放效果實(shí)現(xiàn)方法,以實(shí)例形式詳細(xì)分析了Android中粒子對(duì)象類Particle類和粒子集合類ParticleSet類及物理引擎ParticleThread類 的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android實(shí)現(xiàn)文字逐字顯示出來

    Android實(shí)現(xiàn)文字逐字顯示出來

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)文字逐字顯示出來效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android中l(wèi)istview嵌套scrollveiw沖突的解決方法

    Android中l(wèi)istview嵌套scrollveiw沖突的解決方法

    這篇文章主要為大家詳細(xì)介紹了Android中l(wèi)istview嵌套scrollveiw沖突的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android 調(diào)用notifyDataSetChanged方法失敗解決辦法

    Android 調(diào)用notifyDataSetChanged方法失敗解決辦法

    這篇文章主要介紹了Android 調(diào)用notifyDataSetChanged方法失敗解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Android Studio preview 不固定及常見問題的解決辦法

    Android Studio preview 不固定及常見問題的解決辦法

    preview 可以幫助您預(yù)覽您的布局文件將如何在用戶的設(shè)備上呈現(xiàn)。這篇文章主要介紹了Android Studio preview 不固定及常見問題的解決辦法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Kotlin對(duì)象比較注意點(diǎn)示例詳解

    Kotlin對(duì)象比較注意點(diǎn)示例詳解

    你知道在kotlin中,如何來比較對(duì)象相等嗎?下面這篇文章主要給大家介紹了關(guān)于Kotlin對(duì)象比較注意點(diǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Android中自定義一個(gè)View的方法詳解

    Android中自定義一個(gè)View的方法詳解

    這篇文章主要介紹了Android中自定義一個(gè)View的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android中自定義View的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-07-07
  • Android入門之ViewFlipper翻轉(zhuǎn)視圖的使用詳解

    Android入門之ViewFlipper翻轉(zhuǎn)視圖的使用詳解

    本篇給大家?guī)Я说氖荲iewFlipper,它是Android自帶的一個(gè)多頁面管理控件,且可以自動(dòng)播放!本篇我們我們會(huì)使用兩個(gè)例子:一個(gè)自動(dòng)播放首頁輪播頁一個(gè)手動(dòng)可左右滑動(dòng)道頁的輪播頁來說透這個(gè)組件的使用,感興趣的可以了解一下
    2022-11-11
  • php使用phpmailer發(fā)送郵件實(shí)例解析

    php使用phpmailer發(fā)送郵件實(shí)例解析

    這篇文章主要為大家詳細(xì)解析了php使用phpmailer發(fā)送郵件實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評(píng)論