iPhone: UINavigationController удаляет первое представление в стеке после использования - PullRequest
1 голос
/ 29 марта 2011

iPhone

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

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

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

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

Ответы [ 5 ]

1 голос
/ 29 марта 2011

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

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

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

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

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

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

0 голосов
/ 29 марта 2011

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

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

в случае успеха тогда установите Bool в NSuserdefault в значение yes

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

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

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

вот и все.

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

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

NSUserDefaults *std = [NSUserDefaults standardUserDefaults];

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

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

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

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

для проверки

[std stringforkey: @ "isLogined"];

0 голосов
/ 29 марта 2011

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

0 голосов
/ 29 марта 2011

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

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

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

0 голосов
/ 29 марта 2011

Я обнаружил, что просто установив свойство ViewControllers, можно было бы добиться цели.

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

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