2010-02-14 28 views
1

我遵循了“开始iPhone 3开发”中的一个示例,该示例将主视图控制器的代码放置在委托方法中,即选项卡栏。这是正确的地方,或者它应该在一个单独的.h和.m文件?我所有的子视图都在单独的文件中,所以我想知道是否应该将我的标签栏视图控制器代码放在单独的文件中。我应该将我的UITabBarController放在App Delegate之外吗?

此外,对于子视图,我将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]; 
} 

回答

3

开头这是把这个正确的地方,还是应该在一个单独的.h和.m文件? 我应该将委托更改为UIViewController类型,以便我可以调用ViewDidLoad?

不,这是您的初始加载点,而不是视图控制器。即使你改变了它的类型,view也不会调用load方法,这个app delegate不是视图控制器。在这里你加载你的初始视图控制器。 UITabbar(根据doco)“这个类不适用于子类。”见here。 (所以没有.h和.m文件,你会从中得到什么?)你不需要继承子类,因为你将为你放在标签栏中的每个视图获得你的viewdidload方法。

+0

谢谢阿兰,文档很清楚。我应该找到的 – conorgriffin

相关问题