/**
* 接收要执行方法的对象
*/
@property(nonatomic, retain) id target;
/**
* 接收要执行的方法
*/
@property(nonatomic, assign) SEL action;
//设定将要执行的方法, 具体执行的方法内容和执行方法的时间都不确定
-(void)addTarget:(id)target action:(SEL)action;
GDView.m 中:
-(void)addTarget:(id)target action:(SEL)action
{
//方法中的执行方法的对象先用属性_target存储起来
self.target = target;
//要执行的方法也用属性_action存储起来
self.action = action;
//具体如何实现并没有说
}
//当该视图被点击时, 执行该方法
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event
{
[self.target performSelector:self.action withObject:self];
}
//在ViewController中定义一个GDView对象
//实现功能: 鼠标点击视图, 视图随机变换颜色
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor WhiteColor;
GDView *gd = [[GDViewalloc]initWithFrame:CGRectMake(100, 100, 200, 100)];
gd.backgroundColor = [UIColor brownColor];
//在这个方法写出后, 才决定由调用这个方法的对象本身来实现方法名为gdAction的方法. 这个方法会在点击该视图时触发, 而不是按照从上向下的执行顺序.
[gd addTarget:selfaction:@selector(gdAction:)];
[self.view addSubview:gd];
[gd release];
}
-(void)gdAction:(UIView *)view
{
view.backgroundColor = [UIColorcolorWithRed:arc4random()%256 / 255.0green:arc4random() % 256 / 255.0blue:arc4random()%256 / 255.0 alpha:arc4random() % 256 / 255.0];
}