Переключение контроллеров представления без контроллера навигации
Я уверен, что это задавали бесчисленное количество раз, и я видел подобные вопросы, хотя ответ все еще ускользает от меня.
У меня есть приложение с несколькими контроллерами представления и, как хороший контроллер представления, выполняет свою задачу. Однако я застрял в том, что не могу переключиться с одного контроллера представления на другой. Я видел, как многие люди говорят "использовать контроллер навигации", но это не то, что я хочу использовать из-за нежелательных элементов представления, которые являются неотъемлемой частью контроллера представления.
Я сделал следующее и имел ограниченный успех. Контроллер представления переключен, но представление не загружается, и вместо этого я получаю пустое представление:
- (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 автоматически устанавливает представление окна в представление контроллера представления.