2010-08-16 2 views
0

В Obj-C/iOS. Наш дизайн пользовательского интерфейса требует начального экрана с возможностью регистрации или входа в систему. После выполнения любого из этих действий пользовательские данные сохраняются на телефоне и отображается вкладка tabBarController. Тем не менее, нажатие на tabBar внизу отображает представление на экране «войти в систему или зарегистрировать». Можно ли изменить контроллер корневого представления в hiearchy tabBarItem?Можно ли изменить корневой вид tabBarItem, так что нажатие приведет вас ко второму представлению в иерархии?

+0

Я думаю, что делает процесс регистрации модальное вид контроллера вызывается из возможно, будет легче сделать первый вкладку. – quantumpotato

+0

Это тоже работает. –

ответ

1

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

+0

Я попробовал - (void) viewWillAppear: (BOOL) анимированный { \t self.navigationController.navigationBar.hidden = TRUE; \t HideableTabBarController * tbc = (HideableTabBarController *) self.tabBarController; \t [tbc hideTabBar: YES animated: NO]; \t \t NSLog (@ "isUserValid:% d", self.isUserValid); \t если (self.isUserValid == TRUE) { \t \t MyViewController * ViewController = [[MyViewController Alloc] initWithStyle: UITableViewStylePlain Пользователь: self.user События: self.processedEvents]; \t \t viewController.hidesBottomBarWhenPushed = NO; \t \t [сам.navigationController pushViewController: viewController animated: NO]; \t \t [viewController release]; – quantumpotato

+0

Вход в систему автоматически работает нормально, спасибо за указание анимированных: НЕТ для pushVieWController. Если я вернусь, мой навигационный hiearchy закроется: панель навигации остается наверху, но вид не меняется. – quantumpotato

+0

Нажатие вида перед анимацией вида может смутить навигационный контроллер; он гораздо чаще работает в 'viewDidAppear:'. –

2

Что вам нужно сделать, так это иметь UIViewController под названием «LoginViewController» в качестве вашего корневого контроллера, но этот контроллер не имеет UITabBar, это просто контроллер с именем UIView. Кроме того, ваш UITabBarController со всем содержимым, но не включает в себя вход в систему, просто введите свой основной контент.

После входа пользователя в систему вы показываете UITabBarController с его содержимым.

-(void) LoginUser { 
     // Load UITabBarController 
     YourAppDelegate *app = (YourAppDelegate*)[[UIApplication sharedApplication] delegate]; 
     [app.window addSubview:aTabBarController.view]; 
} 

где приложение является вашим * app Delegate.

0

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

Я построил свой журнал в виде модального вида, который вызывается в ViewDidLoad главного контроллера представления приложения если пользователь не вошел в систему:

if (isUserLoggedIn == NO) { 
    [self performSegueWithIdentifier:@"logInUserModalSegue" sender:self]; 
} 

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

Когда пользователь нажимает войти, проверить полномочия и затем отпустить (или нет) модальный контроллер, например:

if (logInStatus == YES) { 
    [[self presentingViewController] dismissViewControllerAnimated:YES 
                 completion:NO]; 
    } else { 
    self.errorDisplay.text = @"Sorry, there was an error logging in."; 
} 
Смежные вопросы