iPhone - выпуск pushViewController

У меня есть корневой контроллер представления, который должен загрузить другой контроллер представления, как только он завершит загрузку (т.е. в методе viewDidLoad).

Я использую UINavigationController для того, чтобы поместить новый контроллер представления в стек:

В моем rootviewcontrollerappdelegate:

-(void) viewDidLoad{
        LoginViewController* lvc = [[LoginViewController alloc]init];
    [self.navigationController pushViewController:lvc animated:NO];
}

У меня есть текстовые поля и кнопки в контроллере представления для загрузки. Выше не похоже, что работает... Он загружает только пустой серый экран, и нет UINavigation bar. Если я закомментирую вторую строку (строка pushViewController), то я вижу панель навигации. Поэтому я думаю, что он загружает что-то, но элементы в загружаемом контроллере представления не отображаются... Есть идеи, почему?

4 ответа

Если вы не делаете что-то хитрое, вы должны звонить alloc на LoginViewController класс, а не переменная. Кроме того, если вы настроили LoginViewController в Интерфейсном Разработчике (в отличие от программно) вам нужно загрузить его из NIB:

LoginViewController *lvc = [[[LoginViewController alloc] initWithNibName:nil bundle:nil] autorelease];
[self.navigationController pushViewController:lvc animated:NO];

Посмотри на initWithNibName:bundle: в документах.

Проверьте, что навигационный контроллер указывает на ноль. Если это так, попробуйте

[self.view addSubview:self.pushViewController.view]

У меня была та же проблема, и я нашел вышеупомянутое решение здесь: UIViewController -viewDidLoad не вызывается

Не совсем уверен, что вы пытаетесь достичь, но когда вы создаете экземпляр LoginViewContoller это должно выглядеть примерно так

LoginViewController* lvc = [[LoginViewController alloc]init];

Судя по характеру наименования вашего контроллера представления, является ли ваш LoginViewController первым контроллером представления для вашего UINavigationController?

Если это то, что вы пытаетесь сделать, вместо этого вы должны инициализировать свой контроллер навигации с помощью LoginViewController в качестве корневого контроллера, а не помещать его в стек навигации.

UINavigationController имеет метод для этого:

- (id)initWithRootViewController:(UIViewController *)rootViewController

РЕДАКТИРОВАТЬ:

Ну, один из способов сделать это - вот так.

В файле делегата приложения.h вы должны были объявить UINavigationController.

@interface MyAppDelegate : NSObject <UIApplicationDelegate> 
{
    UINavigationController *navController;
}

@property (nonatomic, retain) UINavigationController *navController;
@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

В вашем делегате приложения didFinishLaunching:withOption: вы можете создать там экземпляр вашего LoginViewController и использовать его для запуска контроллера UINavigation в качестве контроллера корневого представления.

#import "LoginViewController.h"

@implementation MyAppDelegate

@synthesize navController;
@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    LoginViewController *loginController = [[LoginViewController alloc] init];

    navController = [[UINavigationController alloc] initWithRootViewController:loginController];

    [loginController release];

    [[self window] setRootViewController:navController];

    [navController release];

    [self.window makeKeyAndVisible];
    return YES;
}

Возможно, у меня есть опечатка здесь или там, но это один из способов, которым я бы это сделал.

Другие вопросы по тегам