tabar突起按钮点击

Edit

tabar突起按钮点击

之前面试经常问到tabbar突出按钮该如何点击,只知道用Hittest来解决,但是到底该重写哪个view的hitTest方法我不确定。刚开始肯定想要的是tabBar,但是tabBar的本身没在点击区域,我以为压根不会走进tabBar的HitTest方法,必须在它的上一层寻找,也就是self.view,但是self.view重写又很麻烦,而且突起按钮button是tabBar持有的,self.view取它又不方便,代码耦合高,太复杂。因为我心中有这个疑惑,所以面试的时候我有点胆怯,只是跟人家说是hitTest,但是没具体说怎么写,结果给面试官印象很不好。今天来试了一下~

先添加突起button

#import "MyTabBar.h"

@implementation MyTabBar

- (instancetype)init {
    if (self = [super init]) {

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.backgroundColor = [UIColor yellowColor];
        button.frame = CGRectMake((375 - 50)/2, -25, 50, 50);
        button.layer.cornerRadius = 25;
        button.clipsToBounds = YES;
        [button addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside];
        _myButton = button;
        [self addSubview:button];
    }

    return self;
}

- (void)buttonTouched:(UIButton *)button {
    NSLog(@"click");
}
@end

然后hittest到底写在哪个类里呢?带着疑惑我百度google了一下,发现80% 90%的人都说的都不太对,有些人知道用hitTest,但是把写了一大堆,把所有情况写了一遍。而我想找一个既能实现功能,代码又简单的真不容易。其实很简单的!在MyTabBar


- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (CGRectContainsPoint(_myButton.frame, point)) {
        return _myButton;
    }
    return [super hitTest:point withEvent:event];
}

就这么简单。。 
唯一的缺陷是加上这个按钮后,布局上会很紧凑,可以重写laytouSubView来改,很简单的!


你可能感兴趣的:(iOS)