iOS事件响应链

146 阅读1分钟

AppDelegate 不响应事件

官方文档

touch事件能响应,presses,motion(remote)事件都没响应,查了下发现一个信息:

  • UIView,如果视图是UIViewController的根视图,则下一个响应者是UIViewController。否则,下一个响应者是视图的父视图。

  • 如果UIViewController的视图是UIWindow的根视图,则下一个响应者是UIWindow对象。

  • 如果UIViewController是由另一个UIViewController呈现的,则下一个响应者是第二个视图控制器。

  • UIWindow,窗口的下一个响应者是UIApplication对象。

  • UIApplication,下一个响应者是AppDelegate

  • 仅当该AppDelegateUIResponder的实例且不是视图、UIViewController或app对象本身时,才是下一个响应者。

所以,全局响应(如摇一摇,按键,远程控制)事件,尽量写在UIWindow或者自定义的BaseVC里面,也不知道上面结论是否在每个系统真实如此,目前在iOS 15.3测过。

奇葩,最常见的触摸却可以全局响应,暂时没时间去研究了,网上坑爹的事件响应链描述,可能并不适用于全部事件,只适用于触摸?求解