您的位置:首页 > 其它

target - action设计模式的思想

2014-08-27 08:50 204 查看
不同的实例点击效果不同:点击改变自身颜色,点击改变父视图颜色,点击修改视图位置.以上效果可由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);

}

@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];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: