Правильный способ настройки UINavigationController и его RootViewController в IB - PullRequest
0 голосов
/ 25 ноября 2011

В моем приложении для iPad есть следующая структура:

  • Применение
    • UINavigationController (Предоставление верхней панели с UIBarButton с и т. Д.)
      • Начальный экран входа в систему
      • Второй экран входа в систему

Я не уверен, как мне теперь правильно настроить это в Interfacebuilder. Я предполагаю, что я создам два ViewControllers:

  1. LoginVC1: (Этот также должен включать NavigationController, поскольку он является первым из двух экранов)
  2. LoginVC2: На основании какого-то обратного вызова делегата из LoginVC1 мое приложение перешло бы к этому ViewController.

Это мой LoginVC1 в IB: LoginVC1 http://k.minus.com/jpamEAFkBjpKT.png

И когда я представляю это модально, это выглядит так, что я не хочу: Результат http://k.minus.com/jHAYRnY788jFt.png

Результат:

  • Ни заголовок ViewController, ни кнопка Отмена не отображаются
  • Вид кажется пустым, несмотря на мой взгляд в IB
  • Я установил режим презентации UINavigationController на FormSheet, который также игнорируется, поскольку он отображается в полноэкранном режиме.

Что я делаю не так?

1 Ответ

1 голос
/ 26 ноября 2011

Kjuly Я просто делаю presentModalViewController, чтобы показать диалоговое окно, но так как мой UINavigationControler содержит UIViewController (см. Nib-экран), я предполагаю, что этот ViewController отображается, когда отображается модальное значение.

Не всегда Беси.Добавление его в иерархию UINavigationController не добавляется как rootViewController.Это должно быть сделано в коде, подобном следующему:

UIViewController *rootViewController = [[[ExamplesViewController alloc] init] autorelease];
UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

Кроме того, убедитесь, что вы представляете NavigationController, а не ViewController модально.

Чтобы решить проблему с заголовком NavigationBar, попробуйте установитьself.title свойство в методе

-(void)viewDidload и посмотрите, работает ли это.Если нет, попробуйте self.//instance of UINavigationController//.navigationBar.title = @"string".

Что касается других кнопок, которые не отображаются, я предполагаю, что если установка корневого контроллера в коде не помогает, то вы только ссылались на них в .h, вместо того, чтобы создавать их экземпляры.Так что либо позвоните примерно так в .h:

//.h
@implementation ExampleViewController: UIViewController <UITextFieldDelegate> {

     IBOutlet UIBarButtonItem * CancelButton;
     IBOutlet UITextField * usernameField;
     IBOutlet UITextField * passwordField;
     IBOutlet UIButton * loginButton;
}
@property (nonatomic, retain) IBOutlet UIBarButtonItem * CancelButton;
@property (nonatomic, retain) IBOutlet UITextField * usernameField;
@property (nonatomic, retain) IBOutlet UITextField * passwordField;
@property (nonatomic, retain) IBOutlet UIButton * loginButton;

Затем подключите розетки в XIB, или создайте экземпляры кнопок в .m с помощью:

//.m 

-(void)viewDidLoad {

//do stuff
    CancelButton = [[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(dismissSelf)]autorelease];

//do more stuff

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...