2010-02-16 1 views
2

Мне нужно отобразить пару контроллеров (например, экран входа в систему, экран регистрации и т. Д.). Каков наилучший способ поднять каждый экран?лучшие практики для отображения новых контроллеров просмотров (iPhone)

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

- (void) registerScreen 
{ 
RegistrationViewController *reg = [[RegistrationViewController alloc] initWithNibName:@"RegistrationViewController" bundle:nil]; 
[window addSubview:reg.view]; 
} 
- (void) LoginScreen 
{ 
LoginViewController *log = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 
[window addSubview:log.view]; 
} 

Это работает, но я не могу себе представить, что является лучшим способом ,

ответ

3

Я рекомендую прочитать руководство по программированию контроллера View, если у вас нет: http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

Похоже, представляя вид контроллера модально может быть вашим лучшим выбором, - но вы будете возможно, сначала захотите обернуть его в UINavigationController.

например

UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:theControllerYouWantToPresent] autorelease]; 
[self presentModalViewController:navController animated:YES]; 
+0

Жизнь намного проще при использовании навигационных контроллеров ... –

1

Я часто задавался вопросом, является ли это лучшим способом для меня, но когда я не использую встроенный материал IB (например, NavigationController), у меня есть один метод в AppDelegate, switchToViewController:(UIViewController *)viewController, который я передаю ... Я думаю, это довольно понятно. Таким образом, есть только одно место, где это делается, и я могу легко определить переходы в этом методе, когда приложение приближается к завершению.

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

-(void) switchToViewController:(UIViewController *)c { 
    if(c == currentController) return; 

    [currentController.view removeFromSuperview]; 
    [window addSubview:c.view]; 
    [currentController release]; 
    currentController = [c retain]; 
} 
+0

Интересно, Итак, как вы называете это? Вы используете Alloc и инициируете свой новый ViewController как обычный, а затем передаете его в это? –

+0

@ Крис. Я считаю, что в то время, когда я писал, это было тем, что я сделал. Я также попробовал, чтобы 'AppDelegate' содержал список своих контроллеров, поэтому он больше походил бы на' [app switchToViewController: app.WhateverController] '. Это имеет то преимущество, что легко сохраняется состояние. (Мои контроллеры были фактически подклассами 'UIViewController', поэтому все они содержали ссылки на' AppDelegate'). Тем не менее, я не занимался разработкой iOS почти за год, поэтому я не уверен, что я бы по-прежнему рекомендовал этот подход, если бы посмотрел на него более критично. –

Смежные вопросы