2015-04-18 1 views
0

У меня есть tabBarController и два UINavigationControllers с UITableViews, прикрепленный к tabBarController. См. Рисунок ниже.Элементы в панели вкладок не видны при загрузке

<code>tabBarController</code> setup

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

<code>tabBar</code> with <code>items</code> not visible

У меня есть чувство, что это потому, что я инстанцирование viewControllers и UINavigationController не загружаются. Я просто не знаю, как нужно сначала загружать UINavigationController.

код я использую ниже:

var table1 : AllPlacesViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("AllPlaces") as AllPlacesViewController 

var table2:AttendingPlacesTableViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("AttendingPlaces") as AttendingPlacesTableViewController 

table1.delegate = self 
table2.delegate = self 

var navController1 = UINavigationController(rootViewController: table1) 
var navController2 = UINavigationController(rootViewController: table2) 

self.viewControllers = [navController1, navController2] 

Поэтому я поставил их, как это происходит потому, что я хочу, чтобы обмениваться данными между viewControllers по ссылке.

ответ

0

Вы переопределяете все, что вы настроили в раскадровке, установив в своем коде другой набор контроллеров. Не нужно создавать какие-либо из этих объектов в коде, поскольку они будут созданы экземпляром раскадровки.

EDIT:

Вместо этого установить уникальные идентификаторы для каждого из Segues и в пользовательском контроллера панели вкладок, переопределить метод 'prepareForSegue'

// MARK: - Segue handling 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == kSegue_YourSegueIdentifier { 
     if let viewController : YourCustomVC = segue.destinationViewController as? YourCustomVC { 
      viewController.delegate = self 
     } 
    } 
} 

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

Я не обращал достаточного внимания на раскадровку на вашем изображении. На вкладках контроллера панели табуляции и в контроллерах контроллера корневого контроллера навигатора не будет указателей segue.

Вы можете получить к ним прямой доступ, выполнив итерацию с помощью массива viewControllers контроллера панели вкладок в viewDidLoad.

EDIT 2:

Вы можете перебирать контроллеры просмотреть легко

for viewController in self.tabBarController!.viewControllers! { 
     if let navigationController = viewController as? UINavigationController { 
      if let yourCustomVC = navigationController as? YourCustomVCClass { 
       yourCustomVC.delegate = self 
      } 
     } 
    } 
+0

Я пытаюсь реализовать этот метод, но segue для 'navigationController' - это взаимосвязь segue, и я не могу установить на ней идентификатор. Должен ли я создать ручную сегую для этого? Кроме того, будет ли введенный вами метод заменить весь код, который у меня есть в настоящее время? – Ryguyu

+0

Я довольно новичок в swift, поэтому я искал, как перебирать массив 'viewControllers'. У меня возникли проблемы с поиском, как это сделать быстро. Каким будет лучший способ перебора через «viewContollers»? – Ryguyu

1

ли вы использовать «Редактор | Вставить в», чтобы встроить навигационные контроллеры в TabBar? Это очень важно! Таблетки с контроллерами навигации были проблемой в более старых версиях, но эта функция XCode помогает решить такие проблемы, как я думаю.

0

Создание вашей навигацииКонтроллеры в коде игнорируются раскадровки UINavigationControllers, которые UITabBarItem созданы для вас автоматически с помощью UITabBarController, вот почему вы ничего не видите. Вам также нужно создать UITabBarItem для каждого настраиваемого диспетчера навигации.

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