Переключение контроллеров представления без контроллера навигации

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

У меня есть приложение с несколькими контроллерами представления и, как хороший контроллер представления, выполняет свою задачу. Однако я застрял в том, что не могу переключиться с одного контроллера представления на другой. Я видел, как многие люди говорят "использовать контроллер навигации", но это не то, что я хочу использовать из-за нежелательных элементов представления, которые являются неотъемлемой частью контроллера представления.

Я сделал следующее и имел ограниченный успех. Контроллер представления переключен, но представление не загружается, и вместо этого я получаю пустое представление:

- (IBAction)showLogin:(id)sender
{
    PPLoginViewController *login = [[PPLoginViewController alloc] initWithNibName:@"PPLoginViewController" bundle:nil];

    PPAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    appDelegate.window.rootViewController = login;

    [self.view insertSubview:login.view atIndex:0]; 
}

2 ответа

Решение

С помощью UINavigationController как rootViewController хороший тон создания приложений для iOS.

Как я понимаю, нежелательные элементы представления это навигационная панель? Вы можете просто скрыть это вручную, установив:

[self.navigationController setNavigationBarHidden:YES];

А что касается вашего случая, если вы хотите изменить свой текущий viewController(для iOS 6), вы можете просто представить новый:

[self presentViewController:login animated:YES completion:nil];

или добавьте дочерний элемент ( Вот хороший пример для добавления и удаления дочернего элемента):

[self addChildViewController:login];

Зачем устанавливать UINavigationController в качестве пользователя root?

1) Прежде всего это делает ваше приложение видимым, чтобы контроллеры представления были хорошо структурированы. (Особенно это нужно на айфоне). Вы всегда можете получить стек и вытолкнуть (или переместить) в любой viewController, который вы хотите.

2) Почему я делаю всегда делать навигацию как корневую, потому что это делает приложение более supportable Таким образом, для добавления некоторых функций в приложение потребуется не так много изменений кода.

Если вы создадите один (корневой) viewcontroller с большим количеством дочерних элементов или представляющий другие viewcontrolls, это сделает ваш код действительно трудным для поддержки и создаст что-то вроде gode-object.

Послушай, Джордж, UINavigationController - это путь. Ваши причины отказа от его использования недействительны.

Однако причина, по которой ваш код не работает, может быть связана с ненужной строкой после установки rootViewController для входа в систему vc.

Согласно документации Apple, установка rootViewController автоматически устанавливает представление окна в представление контроллера представления.

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