#import <UIKit/UIKit.h>
#import "MyView.h"
@interface RootViewController : UIViewController
{
MyView *view1;
MyView *view2;
}
@end
//*************************************************//
#import "RootViewController.h"
@interface RootViewController ()
@end
@implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
view1 = [[MyView alloc]initWithFrame:CGRectMake(10, 10, 100, 100) flag:1];
view1.backgroundColor = [UIColor redColor];
//target-action方法
[view1 addMyTarget:self action:@selector(touchView1)];
[self.view addSubview:view1];
view2 = [[MyView alloc]initWithFrame:CGRectMake(100, 100, 100, 100) flag:2];
view2.backgroundColor = [UIColor purpleColor];
[view2 addMyTarget:self action:@selector(touchView2)];
[self.view addSubview:view2];
}
//点击view1执行的方法
- (void)touchView1
{
view1.backgroundColor = [UIColor blackColor];
}
//点击view2执行的方法
- (void)touchView2
{
view2.frame = CGRectMake(200, 200, 100, 100);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
//********************************************************//
#import <UIKit/UIKit.h>
@interface MyView : UIView
{
//定义变量接收传过来的值
NSInteger myFlag;
}
//声明自定义初始化方法 (加一个参数)
- (instancetype)initWithFrame:(CGRect)frame flag:(NSInteger)flag;
//声明 target-action方法
#warning 第一步 声明
- (void)addMyTarget:(id)target action:(SEL)action;
#warning 第二步 声明target-action属性
@property(nonatomic,assign)id target;
@property(nonatomic,assign)SEL action;
@end
//*************************************************//
#import "MyView.h"
@implementation MyView
//重写初始化方法
- (instancetype)initWithFrame:(CGRect)frame flag:(NSInteger)flag
{
self = [super initWithFrame:frame];
if (self) {
//接收一下这个flag 在touchbegan方法里面用来区分点击的是哪一个view
myFlag = flag;
}
return self;
}
#warning 第三步 实现target-action方法
- (void)addMyTarget:(id)target action:(SEL)action
{
//接收传递过来的目标和行为
self.target = target;
self.action = action;
}
#warning 第四步 在touchbegan方法里面让目标去执行行为
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.target performSelector:self.action withObject:self afterDelay:0]; //延时为0
/*
if (myFlag == 1) {
self.backgroundColor = [UIColor greenColor];
} else {
self.frame = CGRectMake(150, 150, 100, 100);
}
*/
}
@end