2015-05-27 2 views
0

Я пропустил свой первый контроллер представления (страницу входа), как только пользователь успешно войдет в мое приложение и решит сохранить их учетные данные.iOS пропускает вход в систему с помощью rootViewController, вызывая ошибку черной полосы в вложенных табличных видах.

Мой новый контроллер корневого представления - это TabBarController, потому что навигация моего приложения использует TabBar.

Однако в приложении у меня есть TableView, которым предшествует их соответствующий NavigationController. В этих TableViews я получаю черную полосу над TabBar. Если я перейду к следующему TableView, тогда черная полоса удвоится, и если я войду в следующий TableView, тогда черная полоса теперь будет в 3 раза больше первой.

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

First Bar

Double Sized Bar after second navigation to TableView

Third navigation to TableView, now 3 times initial size

У меня есть это в моем AppDelegate (используя Swift) в моем методе didFinishLaunchingWithOptions:

if let api_key = NSUserDefaults.standardUserDefaults().stringForKey("key") { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let tabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarC") as! MyTabBarController 
     if let window = self.window { 
      window.rootViewController = tabBarController 
     } 
    } 

Должен ли я инстанцировании внутренние навигации контроллеры? Если да, то как это сделать, так как у меня в TabBar уже есть 4 NavigationControllers для 4 вкладок, где бы я вставлял дополнительные NavControllers, найденные глубоко внутри приложения?

UPDATE: я был в состоянии решить черный бар ошибка по

  1. закрытия проекта
  2. сжатия Main.storyboard файл сохранить в качестве резервного
  3. удален файл Main.storyboard из папки проекта
  4. добавлен в предыдущую версию Main.storyboard из резервной копии

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

Код псевдео В раскадровке добавьте идентификатор к сеансу между контроллером просмотра входа и tabBar.

In the login VC 
    view did load 
     hide the textboxes 

    if key exists { 
     performSegue(id: <segwayid> 
    } else { 
     show the login textboxes 
+0

"4 НавигацияКонтроллеры для 4 вкладок". У вас уже есть 4, и вам еще нужно больше. Похоже, что весь ваш дизайн нуждается в повторном использовании. – Gruntcakes

+0

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

+0

Имеет ли экран «Записи времени» свой собственный навигационный контроллер, или он помещен в ту же самую, что использовался предыдущим экраном? – chedabob

ответ

0

O.K, В настройках проекта. не устанавливайте основную раскадровку.

ProjectSeetings

и изменить свой код на следующее:

self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
let storyboard = UIStoryboard(name: "Main", bundle: nil) 
var rootController = nil 

if let api_key = NSUserDefaults.standardUserDefaults().stringForKey("key") { 
    rootController = storyboard.instantiateViewControllerWithIdentifier("TabBarC") as! MyTabBarController 
     } 
else { 
    rootController = storyboard.instantiateViewControllerWithIdentifier("LoginController") as! LoginController // Change this line according to your project. 
} 

self.window!.rootViewController = rootController 
self.window!.makeKeyAndVisible() 
+0

В последнем утверждении if вы хотели установить window.rootViewController = tabBarController? Или в rootController, который вы определили и условно устанавливаете. –

+0

Я пробовал это, и теперь, когда приложение запускается, я получаю полностью черный экран. Я решил проблему, заменив файл Main.storyboard резервной копией до черных полос. Возможно ли, что в моем файле Main.storyboard произошла некоторая коррупция? это происходит? –

+0

@MaryMartinez нет, просто нажмите клавишу make и видна в окне. –

0

Я подозревал, что вы меняете каждый view's frame не идти под UITabBar кодом.

Вы должны рассмотреть ваши loadView (если это так), viewDidLoad, viewWillAppear или viewDidAppear метод в вас UIViewController.