继承UIView自定义button的addTarget


前几天去面试,面试官问到继承UIView实现和系统UIButton相似的监听方法,心里面知道这是难为人的问题,其实没啥用,但是还是打算写出来,分享给需要的小伙伴.

一.自定义Button首先了解一下UIView的触摸事件:

/** 1.当触摸开始时会调用下面的事件 */

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;

/** 2.当触摸移动时会调用下面的事件 */

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)event;

/** 3.当触摸结束时会调用下面的事件 */

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent*)event;

/** 4.当触摸取消时会调用下面的事件 */

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent*)event;

所以,在封装自己的button时,会用到上述的方法触发回调;

二.实现

首先新建一个TTButton类,继承于UIView, 在TTButton类中自定义button.下面要为自定义Button添加target和action接口,步骤如下:

1.在TTButton.h中声明方法:

//添加targetAction回调

-(void)addTarget:target action:(SEL)action;

2.在TTButton.m中进行实现:

(1),添加私有扩展属性:

@interface TTButton()

/** target */

@property(nonatomic, weak) id target;

/** action */

@property(nonatomic, assign) SEL action;

@end

(2),方法实现:

//回调

-(void)addTarget:(id)target action:(SEL)action

{

        self.target= target;

        self.action= action;

}

-(void)touchesEnded:(NSSet *) touches withEvent:(UIEvent*) event

{

        //获取触摸对象

        UITouch *touche = [touches anyObject];

       //获取touche的位置

      CGPoint point = [touche locationInView: self];

       //判断点是否在button中

       if(CGRectContainsPoint(self.bounds, point)) {

        //执行action

        [self.target  performSelector: self.action withObject: self];

         }

}

3.如何使用:

导入头文件使用一下:

TTButton *btn = [[TTButton alloc] initWithFrame:CGRectMake(100,100,100,30)];

btn.backgroundColor = [UIColor redColor];

[btn addTarget: self action:@selector(btnClick)];

[self.view addSubview: btn];


-(void)btnClick

{

       TTLog(@"黄文涛");

}


到此就结束了,欢迎交流指正, 本人QQ:1334627194

你可能感兴趣的:(继承UIView自定义button的addTarget)