为什么AppDelegate继承自UIResponder?

时间:2011-08-01 00:16:52

标签: ios uiresponder

我注意到在使用Xcode 4.2 beta 4中的iPhone Master-Detail模板创建一个新项目时,它确实:

// AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>

为什么AppDelegate继承自UIResponder而不是NSObject

6 个答案:

答案 0 :(得分:12)

来自Converting to Storyboards Release Notes

  

注意:在当前的Xcode模板中,应用程序委托类继承自UIResponder。这样,委托实例可以参与响应程序链,从而处理应用程序级操作。如果您尚未在现有应用程序中使用此模式,则无需将其用于故事板。

答案 1 :(得分:3)

查看UIResponder的文档。由于AppDelegate可以响应触摸事件,因此它实现了UIResponder接口。

答案 2 :(得分:2)

UIResponder是UIKit框架的基类。 UIResponder可以处理这些事件。

您的AppDelegate课程是UIApplication创建的UIApplicationMain的委托课程。 AppDelegate符合UIApplicationDelegate协议。

UIResponder类具有获取应用程序窗口的方法,所有窗口都将被填充,因此您应该有一个继承自UIResponder的类以生成窗口作为关键。

答案 3 :(得分:1)

我猜它是可以访问全局撤消管理器。

答案 4 :(得分:1)

AppDelegate继承自处理iOS事件的UIResponderUIResponder类为响应和处理事件的对象定义了一个接口。

答案 5 :(得分:-4)

更新:我的回答可能有误。我只是按照iOS文档中的图像进行操作。但是,它必须过时。

除非iOS 5中有新的内容尚未记录,否则我认为这是一个使用此Xcode 4.2 beta 4模板的拼写错误。在iOS应用中,应用委托应该是NSObject的子类,而不是UIResponder,例如:

@interface AppDelegate : NSObject <UIApplicationDelegate>

iOS apps, in UIKit (for Cocoa Touch, e.g., iPhone & iPad), UIApplication is the last responder in the responder chain

Mac OS X apps, in the Application Kit (for Cocoa, e.g., Mac), the app delegate is the last responder in the responder chain