首页 > 代码库 > target - action设计模式的思想

target - action设计模式的思想

不同的实例点击效果不同:点击改变自身颜色,点击改变父视图颜色,点击修改视图位置.以上效果可由target - action设计模式实现.
- (void)viewDidLoad
{
    [
super viewDidLoad];
    
// Do any additional setup after loading the view.
    
self.view.backgroundColor = [UIColor yellowColor];
    
CustomView *greenView = [[CustomView allocinitWithFrame:CGRectMake(2040280100)];
    greenView.
backgroundColor = [UIColor greenColor];
    [greenView 
addTarget:self acton:@selector(changeColor:) forControlEvents:UIControlEventTouchUpInside];
    [
self.view addSubview:greenView];
    [greenView 
release];
    
    
CustomView *redView = [[CustomView allocinitWithFrame:CGRectMake(20200280100)];
    redView.
backgroundColor = [UIColor redColor];
    [redView 
addTarget:self acton:@selector(changeSuperviewColor:) forControlEvents:UIControlEventTouchUpInside];
    [
self.view addSubview:redView];
    [redView 
release];
    
    
CustomView *blueView = [[CustomView allocinitWithFrame:CGRectMake(20360280100)];
    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 + 100arc4random() % 400 + 100);
}

@interface CustomView ()
{
    
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];
    }
}


target - action设计模式的思想