Дизайн приложения для iPhone UINavigationController - PullRequest
2 голосов
/ 11 августа 2010

Попытка обернуть голову вокруг того, как структурировать приложение вокруг UINavigationController.Мне кажется, что большинство объяснений предполагают, что приложение всегда запускается на корневом контроллере и оттуда детализируется, но мне неясно, как это согласуется с шагом входа в систему / регистрации, который происходит до того, как вы входите в приложение.Структура будет выглядеть следующим образом:

 Home page                                            | Main app (typical nav hierarchy)
------------                                          |---------------------------------
 Log in   ----> Login page                            | App section 1
               ------------                           | App section 2
                Do login   ------------------------>  | etc.
             <- Cancel                                |
                                                      |
 Register ------------------->  Register page         |
                               -----------------      |
                                Do registration --->  |
                             <- Cancel                |

Итак, в основном я предполагаю, что контроллер «Основное приложение» должен быть корневым контроллером приложения, верно?В этом случае мне неясно, как обрабатывать весь процесс, который находится перед ним (который в основном похож на структуру навигации, отдельную от структуры навигации приложения).Является ли «Домашняя страница» модальным контроллером, отображаемым поверх основного приложения, а также отдельным навигационным контроллером для шагов входа в систему / регистрации, чтобы после входа в систему она просто всплывала, чтобы вернуть нас в корень приложения?

Надеюсь, я просто слишком усложняю то, что на самом деле очень просто, но, похоже, пока что меня не зацепило.Любые указатели очень ценятся.

РЕДАКТИРОВАТЬ : Итак, вот что я закончил, что, кажется, работает для того, что мне нужно.У меня есть два UINavigationController, оба назначены MainWindow в IB с отдельными начальными NIB.Один - это навигационный контроллер запуска приложения (дом / логин / регистрация), а второй - главный контроллер навигации приложения.Мой делегат приложения имеет следующий код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [window addSubview:startNavController.view];
    [window makeKeyAndVisible];
    return YES;
}

- (void)activateMainApp {
    [startNavController.view removeFromSuperview];
    [window addSubview:appNavController.view];
    [window makeKeyAndVisible];
}

На последнем этапе входа в систему / регистрации у меня есть этот код, который вызывает делегат приложения для переключения между контроллерами навигации:

- (IBAction)continuePressed {
    // Transfer control to the main app nav controller:
    MyAppDelegate *app = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
    [app activateMainApp];
    [app release];
}

Я подозреваю, что я мог бы сделать это с помощью одного контроллера Nav, но это имело логический смысл для меня, основываясь на моей структуре представления, и, кажется, работает, и я в конечном итоге получаю основной домашний вид в качестве корневого представления контроллера навигации приложения,по желанию.Любые дополнительные отзывы приветствуются, если в этом есть что-то сумасшедшее.

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

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

. В корневом контроллере нет ничего особенного, кроме того, что вы можете попасть туда одним вызовом (popToRootViewControllerAnimated) и что вы не можете открыть его дальше.Все контроллеры представлений, управляемые контроллером навигации, находятся в стеке, поэтому вы можете помещать их в стек или извлекать их из стека по своему усмотрению.

Я думаю, что это полезно, когда BackСтрелка будет полезна.

0 голосов
/ 11 августа 2010

UINavigationController - это просто способ организации UIViewController. Там не должно быть определенного корневого представления. Вы просто ставите нужные виды сверху.

Чтобы добавить еще один контроллер представления поверх, просто вызовите [UINavigationController pushViewController: animated: YES];

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