2013-04-07 4 views
0

Я очень новичок в iOS dev (но имею более 10 лет опыта работы с другими платформами, поэтому он должен помочь). Теперь мне нужно создать относительно сложное приложение iOS и сделать это очень быстро :).iOS views navigation best practices

Я создал приложение, основанное на шаблоне с вкладкой «Использование вкладок», используя раскадровку. Затем я добавил логин, который использует JSON для связи с веб-приложением. Я сделал это представление начальным (сначала это видит пользователь), переместив соответствующую стрелку из контроллера панели вкладок по умолчанию на мой «контроллер входа в систему».

В окне входа в систему у меня есть текстовые поля и кнопка входа. При нажатии кнопки приложение проверяет имя пользователя и пароль, а затем переводит его на контроллер панели вкладок по умолчанию (созданный Xcode). Я делаю это с этим кодом:

WPFirstViewController *fvc = [self.storyboard instantiateViewControllerWithIdentifier: @"TabBars"]; 
[fvc setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
[self presentViewController:fvc animated:YES completion:nil]; 

Все работает отлично, но я запутался, чем я не использовал графические линии между видами на раскадровке, и я не уверен, что мой подход является правильным.

Итак, вопросы в том, как я должен перемещать пользователя из окна входа в панель управления панели вкладок? Каков наилучший способ в моем случае? А также, как, например, я должен перемещаться по пользователю с одной из страниц страниц контроллера таблиц (например, нажав кнопку «Настройки») в соответствующее представление, а затем обратно? Может быть, кто-то может поделиться ссылкой на какую-то хорошую статью.

Извините за длинный текст. Заранее спасибо за вашу помощь!

+0

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

+0

Спасибо, роботизированный кот! Мне становится все более и более ясно, пока я читаю все, что могу найти об этом :) –

ответ

1

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

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

+0

Спасибо за ответ! Но мне все еще не ясно. Почему я не должен отключать контроллер входа в систему и первый в приложении? Поскольку главный контроллер панели вкладок без имени пользователя не имеет данных для отображения, он должен сначала перейти на веб-приложение через json, чтобы получить эти данные после успешного входа пользователя в систему. И просмотр в режиме просмотра «используется один раз». Разве не ясно, разделить его? –

+0

@DmitrySikorsky, я думаю, что это нормально, если он первый, но вы не должны представлять свой контроллер панели вкладок как модальный. Если вы хотите, чтобы ваш контроллер входа в систему был первым, тогда, когда вы закончите с этим, переключите контроллер корневого окна окна на контроллер панели вкладок. Но многие модальные контроллеры «используются один раз», поэтому я думаю, что способ сказал, что это очень распространенный способ сделать логин-контроллеры. – rdelmar

1

Я бы посоветовал вам не использовать storyBoards. Кроме того, если вы планируете использовать навигационный контроллер в своем приложении, то вы определенно будете использовать функцию нажатия на контроллеры вида на self.navigationViewController вашего контроллера. Он прост в использовании, очень просто!

+0

Спасибо, что ответили! Не могли бы вы объяснить, что является отрицательным результатом использования раскадровки? (Я знаю только то, что эта функция поддерживается только iOS 5+.) –

+0

Раскадровки нелегко управляемы, особенно если вы используете какую-то систему управления версиями.Они обеспечивают отличное решение для чего-то быстрого, но не для чего-то хорошего. И, как вы сказали, они работают только для iOS 5+. В настоящее время я пишу код, который работает для iOS 4.x + – ipinak

0

Как правило, контроллеры вид входа в систему должны быть модально представлены: presentModalViewController:animated:

В отношении вашего UITabBarController, каждая вкладка может быть UINavigationController, что позволит вам поддерживать стек UIViewControllers.

Все остальное определяет, является ли контроллер вида, который вы хотите представить, модальным или частью указанного стека.