不同的实例点击效果不同:点击改变自身颜色,点击改变父视图颜色,点击修改视图位置.以上效果可由target - action设计模式实现.
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor yellowColor];
CustomView *greenView = [[CustomView alloc] initWithFrame:CGRectMake(20, 40, 280, 100)];
greenView.backgroundColor = [UIColor greenColor];
[greenView addTarget:self acton:@selector(changeColor:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:greenView];
[greenView release];
CustomView *redView = [[CustomView alloc] initWithFrame:CGRectMake(20, 200, 280, 100)];
redView.backgroundColor = [UIColor redColor];
[redView addTarget:self acton:@selector(changeSuperviewColor:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:redView];
[redView release];
CustomView *blueView = [[CustomView alloc] initWithFrame:CGRectMake(20, 360, 280, 100)];
blueView.backgroundColor = [UIColor blueColor];
[blueView addTarget:self acton:@selector(changelocation:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:blueView];
[blueView release];
}
- (void)changeColor:(CustomView *)view
{
view.backgroundColor = [UIColor randomColor];
}
- (void)changeSuperviewColor:(CustomView *)view
{
view.superview.backgroundColor = [UIColor randomColor];
}
- (void)changelocation:(CustomView *)view
{
view.center = CGPointMake(arc4random() % 200 + 100, arc4random() % 400 + 100);
}
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor yellowColor];
CustomView *greenView = [[CustomView alloc] initWithFrame:CGRectMake(20, 40, 280, 100)];
greenView.backgroundColor = [UIColor greenColor];
[greenView addTarget:self acton:@selector(changeColor:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:greenView];
[greenView release];
CustomView *redView = [[CustomView alloc] initWithFrame:CGRectMake(20, 200, 280, 100)];
redView.backgroundColor = [UIColor redColor];
[redView addTarget:self acton:@selector(changeSuperviewColor:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:redView];
[redView release];
CustomView *blueView = [[CustomView alloc] initWithFrame:CGRectMake(20, 360, 280, 100)];
blueView.backgroundColor = [UIColor blueColor];
[blueView addTarget:self acton:@selector(changelocation:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:blueView];
[blueView release];
}
- (void)changeColor:(CustomView *)view
{
view.backgroundColor = [UIColor randomColor];
}
- (void)changeSuperviewColor:(CustomView *)view
{
view.superview.backgroundColor = [UIColor randomColor];
}
- (void)changelocation:(CustomView *)view
{
view.center = CGPointMake(arc4random() % 200 + 100, arc4random() % 400 + 100);
}
@interface CustomView ()
{
id _target; //目标
SEL _action; //行为
UIControlEvents _controlEvents;
}
@end
{
id _target; //目标
SEL _action; //行为
UIControlEvents _controlEvents;
}
@end
//
为当前视图指定当视图接收到响应事件之后
,
由
target
来通过
action
方法进行响应
.
- ( void )addTarget:( id )target acton:( SEL )action forControlEvents:( UIControlEvents )controlEvents
{
// 利用实例变量存储外界传入的参数 , 方便在其他方法中使用
_target = target;
_action = action;
_controlEvents = controlEvents;
}
- ( void )touchesBegan:( NSSet *)touches withEvent:( UIEvent *)event
{
if ( UIControlEventTouchDown == _controlEvents ) {
// 当当前视图接收到触摸事件之后 , 交由 target 去处理
[ _target performSelector : _action withObject : self ];
}
}
- ( void )touchesEnded:( NSSet *)touches withEvent:( UIEvent *)event
{
if ( UIControlEventTouchUpInside == _controlEvents ) {
[ _target performSelector : _action withObject : self ];
}
}
- ( void )addTarget:( id )target acton:( SEL )action forControlEvents:( UIControlEvents )controlEvents
{
// 利用实例变量存储外界传入的参数 , 方便在其他方法中使用
_target = target;
_action = action;
_controlEvents = controlEvents;
}
- ( void )touchesBegan:( NSSet *)touches withEvent:( UIEvent *)event
{
if ( UIControlEventTouchDown == _controlEvents ) {
// 当当前视图接收到触摸事件之后 , 交由 target 去处理
[ _target performSelector : _action withObject : self ];
}
}
- ( void )touchesEnded:( NSSet *)touches withEvent:( UIEvent *)event
{
if ( UIControlEventTouchUpInside == _controlEvents ) {
[ _target performSelector : _action withObject : self ];
}
}