iPhone - выпуск pushViewController - PullRequest
0 голосов
/ 26 июля 2011

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

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

В моем rootviewcontrollerappdelegate:

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

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

Ответы [ 4 ]

1 голос
/ 26 июля 2011

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

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

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

0 голосов
/ 26 июля 2011

Судя по характеру наименования вашего контроллера представления, является ли ваш 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;
}

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

0 голосов
/ 26 июля 2011

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

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

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

0 голосов
/ 26 июля 2011

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

LoginViewController* lvc = [[LoginViewController alloc]init];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...