Target/Action 设计模式介绍
Target/Action 设计模式可以实现高内聚低耦合的特点, 可以实现解耦
在一般的视图类中, 如果直接使用触摸事件的响应方法的话, 不够灵活, 对于不同的视图,在相同的触摸事件中如果要实现不同的功能, 那么每次使用触摸事件时, 都需要修改代码, 非常麻烦.
我们可以通过 Target/Action 设计模式, 让我们的 View类 像 Button 一样灵活(Button 的响应方法就是 target/action 设计模式)
//添加 Button 的响应事件
[button addTarget:self action:@selector(handleButtonAction:) forControlEvents:UIControlEventTouchUpInside];
Target/Action 设计模式的使用步骤
1 . 在我们的 View 类中的.h文件定义一个给外界提供的接口, 用于获取触摸响应的目标(target), 以及响应触摸事件之后需要实现的方法(action)
- (void)addTarget:(id)target Action:(SEL)action;
2 . 在我们的 View 类的延展中定义两个实例变量
{
//此处只做简单地存储, 不牵扯到 alloc, 及内存管理问题, 可以直接使用
id _target;//存储响应的目标
SEL _action;//存储响应的方法
}
3 . 在 View 的.m文件中实现 addTarget: Action: 方法
- (void)addTarget:(id)target Action:(SEL)action {
//存储外界的响应目标和方法
_target = target;
_action = action;
}
4 . 在触摸事件的方法中, 实现当 view 接到触摸事件时, 通知 target 执行 action 的功能.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// 当 View 接到触摸事件时, 通知 target 执行 action 方法
[_target performSelector:_action withObject:self];
}
5 . 在视图控制器中调用 addTarget: Action: 方法
ActionView *redView = [[ActionView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
redView.tag = 200;
redView.backgroundColor = [UIColor redColor];
[redView addTarget:self Action:@selector(changeSelfColor:)];
[self.view addSubview:redView];
[redView release];