前言
NS_CLASS_AVAILABLE_IOS(2_0) @interface UIControl : UIView
@available(iOS 2.0, *) public class UIControl : UIView
- UIControl 从字面翻译成为控制器,可以触发事件,达到和用户进行交互。
1、UIControl 的创建
-
Objective-C
// 实例化 UIControl 对象
UIControl *control = [[UIControl alloc] initWithFrame:CGRectMake(self.view.bounds.size.width/2 - 100, 100, 200, 100)];
control.backgroundColor = [UIColor redColor];
[self.view addSubview:control];
// 添加/删除触发事件
/*
- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
- (void)removeTarget:(nullable id)target action:(nullable SEL)action forControlEvents:(UIControlEvents)controlEvents;
(id)target: 响应对象,就是触发了 control 的某个事件后响应谁的方法
(SEL)action: 触发某个事件后响应 target 的哪个方法
(UIControlEvents)controlEvents: 触发 control 的哪个事件
UIControlEventTouchDown // 按下
UIControlEventTouchDownRepeat // 双击,连续按下2次
UIControlEventTouchDragInside // 内部拖动,不松手就触发事件,一直触发
UIControlEventTouchDragOutside // 向外拖出,不松手就触发事件,一直触发
UIControlEventTouchDragEnter
UIControlEventTouchDragExit // 向外拖出,不松手就触发事件,只触发一次
UIControlEventTouchUpInside // 单击
UIControlEventTouchUpOutside // 向外拖出,松手后触发事件
UIControlEventTouchCancel
UIControlEventValueChanged // 数值改变,sliders, etc.
UIControlEventEditingDidBegin // 开始编辑,UITextField
UIControlEventEditingChanged // 编辑中
UIControlEventEditingDidEnd // 结束编辑
UIControlEventEditingDidEndOnExit // 结束编辑,'return key' ending editing
UIControlEventAllTouchEvents // 所有事件,for touch events
UIControlEventAllEditingEvents // 所有编辑事件,for UITextField
UIControlEventApplicationReserved // range available for application use
UIControlEventSystemReserved // range reserved for internal framework use
UIControlEventAllEvents
*/
// 添加触发事件
[control addTarget:self action:@selector(controlClick:) forControlEvents:UIControlEventTouchUpInside];
// 一个控件可以添加多个事件
[control addTarget:self action:@selector(controlClickOther:) forControlEvents:UIControlEventTouchDragOutside];
// 删除添加的事件
[control removeTarget:self action:@selector(controlClickOther:) forControlEvents:UIControlEventTouchDragOutside];
-
Swift
// 实例化 UIControl 对象
let control:UIControl = UIControl(frame: CGRectMake(self.view.bounds.size.width/2 - 100, 100, 200, 100))
control.backgroundColor = UIColor.redColor()
self.view.addSubview(control)
// 添加/删除触发事件
/*
public func addTarget(target: AnyObject?, action: Selector, forControlEvents controlEvents: UIControlEvents)
public func removeTarget(target: AnyObject?, action: Selector, forControlEvents controlEvents: UIControlEvents)
target: 响应对象,就是触发了 control 的某个事件后响应谁的方法
action: 触发某个事件后响应 target 的哪个方法
controlEvents: 触发 control 的哪个事件
TouchDown // 按下
TouchDownRepeat // 双击,连续按下2次
TouchDragInside // 内部拖动,不松手就触发事件,一直触发
TouchDragOutside // 向外拖出,不松手就触发事件,一直触发
TouchDragEnter
TouchDragExit // 向外拖出,不松手就触发事件,只触发一次
TouchUpInside // 单击
TouchUpOutside // 向外拖出,松手后触发事件
TouchCancel
ValueChanged // 数值改变,sliders, etc.
EditingDidBegin // 开始编辑,UITextField
EditingChanged // 编辑中
EditingDidEnd // 结束编辑
EditingDidEndOnExit // 结束编辑,'return key' ending editing
AllTouchEvents // 所有事件,for touch events
AllEditingEvents // 所有编辑事件,for UITextField
ApplicationReserved // range available for application use
SystemReserved // range reserved for internal framework use
AllEvents
*/
// 添加触发事件
control.addTarget(self, action: #selector(UiControl.controlClick(_:)), forControlEvents: .TouchUpInside)
// 一个控件可以添加多个事件
control.addTarget(self, action: #selector(UiControl.controlClickOther(_:)), forControlEvents: .TouchDragOutside)
// 删除添加的事件
control.removeTarget(self, action: #selector(UiControl.controlClickOther(_:)), forControlEvents: .TouchDragOutside)
2、自定义点击触发事件处理
-
Objective-C
// 控件触发事件处理,一般响应方法都会有一个参数,没有也可以,该参数一般是触发的对象
- (void)controlClick: (UIControl *)control {
}
- (void)controlClickOther: (UIControl *)control {
}
-
Swift
// 控件触发事件处理,一般响应方法都会有一个参数,没有也可以,该参数一般是触发的对象
func controlClick(control:UIControl) {
}
func controlClickOther(control:UIControl) {
}