zoukankan      html  css  js  c++  java
  • Button加在UITableViewHeaderFooterView的self.contentView上导致不能响应点击

    你有没有遇到过Button加在UITableViewHeaderFooterView的self.contentView上导致不能响应点击的情况,下面记录一下我遇到的原因和解决方法:

    代码如下:

    - (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier {
        if (self = [super initWithReuseIdentifier:reuseIdentifier]) {
            
            self.titleLabel = [[UILabel alloc]init];
            self.titleLabel.textColor = [UIColor redColor];
            self.titleLabel.font = [UIFont systemFontOfSize:16];
            [self.contentView addSubview:self.titleLabel];

            self.titleLabel.frame = CGRectMake(10, 15, 50, 20);

             self.cleckBtn = [UIButton buttonWithType:UIButtonTypeCustom];

            [self.cleckBtn setTitleColor:[UIColor blackColor] forState:(UIControlStateNormal)];
            self.cleckBtn.titleLabel.font = [UIFont systemFontOfSize:14];
            [self.cleckBtn    addTarget:self action:@selector(cleckTouchBtn:) forControlEvents:UIControlEventTouchUpInside];
            [self.contentView addSubview:self.cleckBtn];
        }
        return self;
    }
    - (void)cleckTouchBtn:(UIButton *)button{
        
        if (self.block) {
            self.block(self.titleLabel.text,self.cleckBtn);
        }
    }
    -(void)layoutSubviews{
        
        self.cleckBtn.frame = CGRectMake(100 , 10, 100 , 30);
    
    }

    分析:

    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位置。

    依次排除...

    最后发现,原因如下:

    -(void)layoutSubviews{

     

    self.cleckBtn.frame = CGRectMake(100 , 10, 100 , 30);

    }

    在该方法中,我没有调用父类方法,意味着放弃了里面其他子视图的布局,只布局这一个按钮.导致frame造成不能点击响应.

     

    解决方法:

    1>方法一:

    -(void)layoutSubviews{
    	
        [super layoutSubviews];
        self.titleLabel.frame = CGRectMake(10, 15, 50, 20);
    	self.cleckBtn.frame = CGRectMake(100 , 10, 100 , 30);
    }
    

    2>方法二:

    直接把子控件加在self上就可以了,不需要加载self.contentView也是可以的.

     

  • 相关阅读:
    64win7+64Oracle+32plsql
    Delphi与Java中的日期互换
    QT变异版本下载(SJLJ长跳转,DWARF不传递错误(32位专用),SEH(64位专用)),以及QT的实验室项目
    顿悟,职业生涯最重要的是行业水平的积累,而不是多学某一门语言(很危险)——遥想铁血强人刘志军对铁路行业的理解以及执行力
    天下古今之庸人,皆以一惰字致败(联想到了自己的高考数学大题)
    这七种情况下,不要创业
    Android 点击桌面快捷方式和Notifycation跳转到Task栈顶Activity
    字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
    QSplashScreen开机画面(不断的repaint)
    一个QT 3D转动控件
  • 原文地址:https://www.cnblogs.com/pengsi/p/6862557.html
Copyright © 2011-2022 走看看