iPhone: UINavigationController удаляет первое представление в стеке после использования

iPhone

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

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

Как удалить логин-вид из стека после загрузки следующего вида?

Примечание. Требуется, чтобы единственным контейнером приложения являлся UINavigationController.

5 ответов

Решение

Я обнаружил, что просто установив свойство ViewControllers, это поможет.

(Мы используем C# и.NET для создания приложений для iPhone с MonoTouch)

public override void ViewDidAppear (bool animated)
{
   NavigationController.ViewControllers = new UIViewController[] { this };
}

Вы можете использовать setViewControllers:animated: для изменения стека контроллеров, но я бы посоветовал вам пересмотреть, действительно ли вы хотите, чтобы ваш контроллер вида входа в систему был корнем стека навигации. Когда пользователи видят контроллер навигации, они ожидают, что будут перемещаться вверх и вниз по иерархии экранов, организованных в древовидную структуру. Изменение корня этого дерева несколько подрывает метафору.

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

A. Запустите на контроллере представления входа в систему и представьте контроллер навигации модально.

Если ваш контроллер вида входа в систему всегда будет первым экраном, который видит пользователь, вы можете добавить его вид непосредственно в окно без контроллера навигации. Затем, как только пользователь войдет в систему, создайте контроллер навигации и представьте его, вызвав presentModalViewController: animated: из своего контроллера вида входа в систему.

Б. Инициализируйте контроллер навигации с его истинным корнем и представьте контроллер представления входа в систему модально.

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

В вышеупомянутом случае ваш Контроллер входа в систему будет называться корневым контроллером для вашего UINavigationController

Читайте ниже Как удалить Root контроллер из UINavigationController

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller%E2%80%99s-root-view-controller/

Удалите кнопку "Назад", установив в элементе навигации элемента входа контроллера параметр backButtonItem равным nil.

Используйте NSUserdefault, чтобы установить значение проверки bool, чтобы показать страницу входа или следующую страницу.

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

если успех, то установите Bool в NSuserdefault на да

и нажмите NextView после успешного входа в систему.

если в следующий раз пользователь заходит в ваше приложение, вы должны сначала проверить NSuserdefault для этого значения bool

в соответствии с этим вы можете нажать nextviewcontroller или страницу входа.

вот и все.

в nsuserdefault вы можете указать строку для ключа вместо Bool

после успешного входа в систему установлен isLogined to yes

NSUserDefaults *std = [NSUserDefaults standardUserDefaults];

[std setObject:@"yes" forKey:@"isLogined"];

если не установлено НЕТ

в перед тем, как нажать кнопку входа в систему просто проверьте, если isLogined да или нет

в соответствии с этим вы можете нажать страницу входа или следующую страницу

проверять

[std stringforkey:@"isLogined"];

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