这是文档中的说明:
如果第一个响应者[对事件或操作消息]无法处理事件或操作消息,则将其转发到称为响应者链的链接系列中的“下一个响应者”。响应器链允许响应器对象将处理事件或操作消息的责任转移给应用程序中的其他对象。
如果响应者链中的对象无法处理事件或操作,则它会将消息重新发送到链中的下一个响应者。该消息沿着链向高级别对象传递,直到被处理。如果未处理,则应用程序会将其丢弃。
那么下一个响应者是什么呢?
它是父视图吗?在它后面的视图吗?iOS如何决定第一响应者和第二响应者?
回答:下一个响应者可以是该视图的父视图,也可以是传递给该视图的任何对象,如手势识别器或其他自定义对象。 iOS使用以下算法来确定下一个响应者:
1. 如果该视图是一个UIControl子类(例如UIButton或UITextField),则下一个响应者通常是它的委托对象。 这是因为UIControl子类通常将用户输入转发给其委托对象进行处理。
2. 如果该视图是UIViewController的子类,则下一个响应者通常是该视图控制器的父视图控制器或导航控制器。
3. 否则,下一个响应者可以是该视图的nextResponder属性指向的任何对象。 默认情况下,该属性指向视图的父视图,但是您可以通过覆盖该方法来更改此行为 UIResponder类的nextResponder方法。
因此,第一响应者是接收用户输入的第一个响应者。 在iOS中,当用户点击文本字段或键盘时,该文本字段将成为第一响应者,并且发送给它的任何操作消息都将由该文本字段处理。 第二个响应者是响应链中的下一个对象,如果第一个响应者无法处理事件或操作,则该对象将尝试处理它。