2013-05-27 4 views
-2

У меня есть эта раскадровка:Пропустить взгляд, если пользователь уже зарегистрирован

storyboard

Второй ViewController является Войти экране.

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

Теперь я устанавливаю TableView как корневой элемент с этим кодом объяснено в другом посте

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; 
InitialViewController *nvc = [[InitialViewController alloc] init]; 
[viewControllers replaceObjectAtIndex:0 withObject:nvc]; 
[self.navigationController setViewControllers:viewControllers]; 

Он работает, но когда я хочу щелкнуть в ячейке, что делает переход к деталям просмотра Безразлично» т работы. если я удалю экран входа в систему и настроит представление таблицы как root в контроллере навигации, он работает.

Кто-нибудь знает почему?

Другие способы, чтобы пропустить вид входа оценены

EDIT: С помощью этого решения он работает, теперь у меня есть две навигационные контроллеры и я перейти от одного к другому с этим кодом

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]]; 
InitialViewController *initial = [storyBoard instantiateViewControllerWithIdentifier:@"appRootController"]; 
AppDelegate *myAppDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
myAppDelegate.window.rootViewController = initial; 

Я не знаю, правильно ли это решение, но оно работает.

+0

Как вы называете это segue? Вы уверены, что используете один и тот же идентификатор segue как в коде, так и в раскадровке? – marzapower

+0

Я не называю segue, я заменяю «Контроллер входа в систему» ​​с помощью «Начального контроллера просмотра» в качестве корневого элемента в навигационном контроллере – jramillete

ответ

7

Мне нужно было то, что вам нужно сейчас. То, что я сделал, - это когда пользователь выполнил вход в систему, я установил соответствующие значения в NSUserDefaults. Тогда в моем AppDelegate.m, я проверить, что NSUserDefaults значения, чтобы определить, если пользователь уже войти в систему

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions метод

Затем я установил RootViewController к соответствующему контроллеру представления. Как использовать раскадровку, Что я бы сделать, это создать экземпляр раскадровки следующим образом:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"YourStoryBoardName" bundle:[NSBundle mainBundle]]; 

Затем используйте NSUserDefaults, чтобы проверить информацию о пользователе.

 // Check user login 
     if([[NSUserDefaults standardUserDefaults] valueForKey:@"AlreadyLogin"]) 
     { 
      // So, here user already login then set your root view controller, let's say `SecondViewController`` 
      SecondViewController *secondViewController = [storyBoard instantiateViewControllerWithIdentifier:@"SecondViewController"]; 
      // then set your root view controller 
      self.window.rootViewController = secondViewController; 
     } 
    else 
    { 
     // It means you need to your root view controller is your login view controller, so let's create it 
     LoginViewController *loginViewController= [storyBoard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 
     self.window.rootViewController = loginViewController; 
    } 

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

+0

Спасибо за ответ, но если я это сделаю, контроллер навигации исчезнет – jramillete

+0

Просто заверните новый контроллер в контроллер навигации: 'UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController: loginViewController]; self.window.rootViewController = navController; ' – marzapower

+1

Я пытался это сделать и используя контроллер навигации из раскадровки, но, если я делаю изменения в appdelegate, это работает, но не из представления. Он показывает контроллер навигации, но сеансы перестают работать. – jramillete