UIButton無法響應點擊事件


一、問題描述

因為項目需要,需要UITableView上添加固定的篩選表頭,一直固定,不能隨UITableView滾動。所以直接將表頭與UITableView分離,將它添加到控制器的UIView上,即添加到UITableView的父視圖上,與UITableView同級。然后表頭上添加三個UIButton,效果達到預期,但問題隨即出現。篩選表頭上的UIButton無法響應點擊事件,剛開始以為造成的原因是手誤把UIButton的父視圖或者UIButton屬性userInteractionEnabled被設置為NO,試着UIButton的父視圖和UIButton的userInteractionEnabled統統設置YES,仍然無法解決這個問題。

 

二、問題分析

UIButton不能響應點擊事件的原因大概有以下三種:

1. UIButton的userInteractionEnabled默認YES,如果設置NO,UIButton就不會有響應點擊事件,同時如果 UIButton的父視圖的userInteractionEnabled屬性為NO,UIButton也會受到影響,不會有響應。

從UIButton的父視圖和UIButton的userInteractionEnabled統統設置YES,這個問題仍然無法解決,所以不是這個問題。

2. 另外就是button本身的frame問題,或者有沒有一層視圖蓋住了button導致按鈕無響應,簡單來說就是按鈕本身和按鈕他爹(父視圖)的問題。

3. UIButton不能響應點擊事件的另一個原因是和UIButton的父視圖有關系。如果父視圖frame是CGRectZero,或者UIButton超出父視圖,UIButton還是會顯示的,但詭異的是UIButton是不會響應點擊事件的,所以要調整父視圖的frame或者UIButton位置。

 

第一種:試過了,排除。

第二種:因為用到MBProgressHUD,所以第二種有可能。但經過調試,發現MBProgressHUD是隱藏的,不會遮擋點擊事件,同時假設MBProgressHUD不隱藏,應該同級的UITableView也不能點擊,但UITableView能響應點擊事件,所以第二種也排除。

第三種:但先設置UIButton的父視圖背景色為紅色,同時先把UIButton都去掉,調試發現UIView並沒有顯示出來。打印UIView的frame,值為{{0, 0}, {414, 44}}。原來問題出現在這里。為什么不能顯示?

原來我設置了frame,還用Masonry設置約束。設置了約束,frame是無效的,同時因為約束設置不合理,導致UIView無法顯示。

    [self.filerView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view.mas_left);
        make.right.equalTo(self.view.mas_right);
        make.top.equalTo(self.view.mas_top);
    }];

 

三、問題解決

UIView的frame去掉,同時設置一個高度約束。

    [self.filerView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(strongSelf.view.mas_left);
        make.right.equalTo(strongSelf.view.mas_right);
        make.top.equalTo(strongSelf.view.mas_top);
        make.height.equalTo(@44);
    }];    

 

效果如下:

 

然后加上UIButton,UIButton能響應點擊事件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM