iOSiOS DeveloperiOS Development

iOS UIButton 点击无响应的解决办法

2017-12-15  本文已影响1267人  calary

前言

在日常开发中我们经常和按钮打交道,但是有时候会碰到比较难处理的问题,就是按钮不响应点击事件,这时候我们需要从下面几方面排查

按钮不响应的原因

解决超出点击区域的问题

这种情况其实很有可能发生,举个我碰到的栗子:聊天区域的高度小于键盘的高度,而输入框是聊天区域的子View,在键盘弹出后,输入框上移,而且超出了父视图的frame,这个时候点击红框的按钮切换表情键盘动作就不响应。


屏幕快照 2017-12-15 下午1.54.38.png

解决办法
这里有两个方法,每次有touch动作时,都会走这两个方法

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

重写方法 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
这是View里的一个方法,处理流程如下

所以我们可以在返回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;
}

这个时候按钮在区域外点击也有效果了

参考

对UIView的hitTest: withEvent: 方法的理解
hitTest:withEvent:方法流程

上一篇 下一篇

猜你喜欢

热点阅读