1.描述
An abstract interface for responding to and handling events.(一个相应和处理事件的抽象接口)
class UIResponder : NSObject
UIResponder既是响应对象,是UIKit app的处理事件的核心部分.很多关键对象都是响应者(responders),其中包括UIApplication对象,UIViewController对象和UIView对象(其中也包含UIWindow).当事件发生后,UIKit就会分发他们给我们的响应对象来处理.
有很多种类的事件,包括触摸事件,移动事件,远程控制事件和按压事件等.为了处理一个特殊类型的事件,响应对象必须覆盖其相匹配的方法.比如为了处理触摸事件,响应者需要实现touchesBegan(:with:),
touchesMoved(:with:),touchesEnded(:with),和touchesCancelled(_:with:)方法.在触摸发生的情况下,响应者使用UIKit所提供的事件信息来追中这些触摸变化和适当的更新app界面.
除了处理事件,UIKit响应者也可以管理我们app其它部分的未处理事件的转发.如果一个已有的响应者不能处理事件,他就会转发事件给响应者链的下一个事件.UIKit动态的管理这响应者链.通过预定规则来决定哪一个对象应该作为下一个接受事件的对象.比如,一个视图转发事件给他的父视图,根视图转发事件给控制器(viewController).
响应者处理UIEvent对象,但是也能接受自定义的输入通过输入视图(input view).系统键盘是最明显的输入视图例子.当用户触碰屏幕上的UITextField和UITextView对象时,该视图则成为第一响应者并且显示它的输入视图(系统键盘).类似的,我们也可以创建自定义输入视图并且当其它响应者被激活时显示他们.我们给响应者的inputView属性赋值,来把自定义输入视图关联到响应者上.
2.代码示例
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
//事件转发到下一个响应者
if self.viewName.compare("myView2").rawValue == 0{
self.next?.touchesBegan(Set<UITouch>(), with: event)
return
}
print("view name is\(self.viewName)---\(#function)")
}
- 工程下载地址:
https://github.com/DeveloperZhang/SwiftStudyDemo
3.总结
xx是一个最基础常见的视图类,可以参考文档进行深入学习:UIKit->Views and Controls-> UIResponder
网友评论