[英]ios Responder chain - how does a View capture an event?
根据https://developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia-CocoaApp/Responder.html的说明 ,“如果视图是由视图控制器管理的,并且该视图无法处理事件,则视图控制器将成为下一个响应者”
这句话是什么意思? 视图是否可以在内部为事件定义处理程序并从本质上捕获事件? 如果不是这种情况,则为视图的ViewController如果已为事件显式定义了处理程序,则将被调用?
似乎与View处理事件的MVC模式相反-或者文档是否真的说调用了特定于View的控制器上的处理程序?
有一个响应者链,由每个UIResponder的nextResponder()
:
我们开始的UIView。
如果此UIView是UIViewController的view
,则该UIViewController。 (这就是您引用的段落所说的。)
UIView的超级视图。
返回步骤2并重复! 不断重复直到我们到达...
UIWindow。
UIApplication。
UIApplication的委托。
某些消息不是发送给特定对象,而是发送给响应者链。 我们从一个特定的对象开始 ,但是如果该对象没有该方法的实现,则不会崩溃。 取而代之的是,我们沿着响应者链走,寻找在链中更远的某个人,该人确实对该方法有实现。 此外,如果我们永远也找不到这样的实现,我们不死机; 消息从链的末端掉落而不会受到惩罚。
有两种主要信息:
触摸事件。
无目标的动作。
关于您的问题,这与MVC有什么关系? 没有。 正如乔什·加夫尼(Josh Gafni)正确回答的那样,MVC并不是世界上唯一的模式。 这是关于响应者,而不是MVC。
UIView
实际上已经具有可以覆盖的事件处理程序。 您可以使用以下方法来UIView
并处理触摸事件:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
View和View Controller之间有两种通信方式。 通常,视图控制器通常会告诉视图要显示的内容,并且事件发生时,视图往往会调用委托方法。 我确实知道,尽管您通常希望这些事件处理程序由View调用,但在View Controller中处理。 但...
UIView
,它们与View特别相关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.