2016-07-08 5 views
0

У меня есть панель вкладок в моем приложении, а одна из кнопок - «Профиль», которая должна представлять один VC, если пользователь не авторизован, а другой, если пользователь уже авторизован. profile imageИзменение корневого контроллера навигационного контроллера панели вкладок

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

создать пользовательский навигационный контроллер с этим кодом внутри

if NSUserDefaults.standardUserDefaults().objectForKey("userId") != nil { 
    let newController: UserViewController = self.storyboard?.instantiateViewControllerWithIdentifier("userViewController") as! UserViewController 
    self.setViewControllers([newController], animated: false) 
} else { 
    let newController: LoginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("loginViewController") as! LoginViewController 
    self.setViewControllers([newController], animated: false) 
} 

Есть ли способ, чтобы реализовать правильно?

ответ

2

Вы пытаетесь установить UINavigationController в качестве корня другого UINavigationController? Потому что это запрещено и не работает.

+0

Нет, tabBar - seque -> контроллер навигации -> контроллеры входа И чем .. Im пытается найти решение для реализации переключения между двумя контроллерами после контроллера nav –

+0

Не является ли пользовательской навигацией контроллер, другими словами, подкласс UINavigationController? – PierreMB

1

Вы пытаетесь создать экземпляр навигационного контроллера, который (как упоминал @PierreMB) не будет работать. Вместо этого вы должны создать два обычных контроллера просмотра с идентификатором «userViewController» и «loginViewController» с помощью раскадровки и создать их экземпляр.

Создайте подкласс UINavigationController, и поместить этот код (который вы написали, слегка измененный) в методе viewWillAppear() (в качестве бонуса, вы можете передать параметр «мультипликационный» бесплатно):

if NSUserDefaults.standardUserDefaults().objectForKey("userId") != nil { 
    let newController = self.storyboard?.instantiateViewControllerWithIdentifier("userViewController") // drop the 'as! UINavigationController' 
    self.setViewControllers([newController], animated: animated) 
} else { 
    let newController = self.storyboard?.instantiateViewControllerWithIdentifier("loginViewController") // drop the 'as! UINavigationController' 
    self.setViewControllers([newController], animated: animated) 
} 

Функция instantiateViewControllerWithIdentifier() по умолчанию возвращает UIViewController, который вы действительно хотите отобразить.

Смежные вопросы