【问题标题】:Should I put my UITabBarController outside the App Delegate?我应该把我的 UITabBarController 放在 App Delegate 之外吗?
【发布时间】:2010-02-14 23:13:02
【问题描述】:

我遵循了“开始 iPhone 3 开发”中的一个示例,该示例将主视图控制器的代码(标签栏)放在委托方法中。这是放置它的正确位置还是应该放在单独的 .h 和 .m 文件中?我所有的子视图都在单独的文件中,所以我想知道是否应该将标签栏视图控制器代码也放在单独的文件中。

另外,对于子视图,我照常调用 ViewDidLoad,但委托方法中没有 ViewDidLoad,我猜是因为它是 NSObject 类型而不是 UIViewController。我是否应该将委托更改为 UIViewController 类型以便调用 ViewDidLoad?

谢谢,我现有应用的代码示例如下。

委托的头文件:

#import <UIKit/UIKit.h>

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {

    UIWindow *window;
    UITabBarController *rootController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *rootController;

@end

委托实现文件的开始

#import "MyAppDelegate.h"


@implementation MyAppDelegate

@synthesize window;
@synthesize rootController;    

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:rootController.view];
    [window makeKeyAndVisible];
}

【问题讨论】:

    标签: iphone cocoa-touch delegates uitabbarcontroller


    【解决方案1】:

    这是放置它的正确位置还是应该放在单独的 .h 和 .m 文件中? 我是否应该将代理更改为 UIViewController 类型以便调用 ViewDidLoad?

    不,这是您的初始加载点,而不是视图控制器。即使你改变了它的类型,view did load 方法也不会被调用,appdelegate 不是一个视图控制器。在这里你加载你的初始视图控制器。 UITabbar(根据文档)“此类不用于子类化。”见here。 (所以没有 .h 和 .m 文件,你会从什么派生?)你不需要子类化,因为你会为你放在标签栏中的每个视图获取 viewdidload 方法。

    【讨论】:

    • 感谢 Aran,文档很清楚。我应该发现
    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 2011-01-10
    • 2020-09-30
    • 2011-09-04
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多