Должен ли я поместить свой UITabBarController вне приложения-делегата? - PullRequest
1 голос
/ 15 февраля 2010

Я следовал примеру из «Начала разработки для 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];
}

1 Ответ

3 голосов
/ 15 февраля 2010

Это правильное место для размещения или оно должно быть в отдельном файле .h и .m? Должен ли я изменить делегата на тип UIViewController, чтобы я мог вызвать ViewDidLoad?

нет, это ваша начальная точка загрузки, а не контроллер представления. Даже если вы измените его тип, метод загрузки загрузки не будет вызван, делегат приложения не является контроллером представления. Именно здесь вы загружаете свой начальный вид контроллера. UITabbar (согласно документу) «Этот класс не предназначен для создания подклассов». см здесь . (так что нет файлов .h и .m, из чего вы бы унаследовали?) вам не нужно создавать подклассы, так как вы получите свой метод viewdidload для каждого из представлений, которые вы помещаете в панель вкладок.

...