根据https://developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia-CocoaApp/Responder.html,"如果视图由视图控制器管理,并且视图无法处理事件,则视图控制器成为下一个响应者"
这句话是什么意思? View可以在内部为事件定义处理程序并在内部捕获它吗?如果不是这样的话,如果视图的ViewController明确定义了事件的处理程序,那么它将被调用吗?
似乎与View处理事件的MVC模式相反 - 或者文档是否真的说调用了特定于View的控制器上的处理程序?
答案 0 :(得分:2)
每个UIResponder的nextResponder()
都有一个响应者链:
我们开始的UIView。
如果这个UIView是UIViewController的view
,那就是UIViewController。 (这就是你引用的段落所说的。)
UIView的超级视图。
回到第2步并重复!不断重复,直到我们到达......
UIWindow。
UIApplication。
UIApplication的代表。
发送某些消息,而不是特定对象,而是发送响应者链。我们使用特定对象启动,但如果该对象没有该方法的实现,我们就不会崩溃;相反,我们走在响应者链上,寻找 拥有该方法实现的链上的某个人。而且,如果我们永远不会找到这样的实现,我们就不会崩溃;消息从链的末端掉落而不受处罚。
有两种主要信息:
触摸事件。
无目标行动。
关于你的问题,这与MVC有什么关系?没有。正如Josh Gafni的回答所说,MVC并不是世界上唯一的模式。这是关于响应者,而不是关于MVC。
答案 1 :(得分:0)
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 Controller通常会告诉View要显示的内容,View会在事件发生时调用委托方法。我确实理解你通常希望这些事件处理程序由View调用,但在View Controller中处理。但...
UIView
,并且它们与视图特别相关。