Получить переменную viewcontroller другой вкладки в текущей панели вкладок - iOS - Swift - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть tabBarController с иерархией ниже

TabBarController

  • Tab 1 -> Контроллер навигации (NavController1) -> ViewController1 -has -> ContainerView --contains-- > DisplayedViewControllerTab1 (это мой контроллер представления tab1)

Переменная dataForVC1 находится в DisplayedViewControllerTab1

  • Когда пользователь нажимает Tab3 (DisplayedViewControllerTab3), я пытаюсь получить значение dataForVC1 для передачи в tab3 viewController

Пока я пробовал это

В TabBarController - метод didSelect

    var data: ModelData?  
    if let navController = tabBarController.viewControllers?[0] as? NavController1, 
       let childNavVC = navController.children.first as? ViewController1 {
       //Get container view
       let conView = childNavVC.containerView. //This is outlet

      //Looking for something like this - struck here
      if let displayedVC1 = "Container view's VC as? DisplayedViewControllerTab1 {
         data = displayedVC1.dataForVC1
     }
}

Добрый совет, как этого добиться

1 Ответ

0 голосов
/ 17 апреля 2020

Вам не нужно суетиться с видами контейнера. В вашем ViewController1 просто добавьте ссылки на DisplayedViewControllerTab1 или другие необходимые вам v c, а затем получите к ним прямой доступ.

Ваш код V C будет выглядеть примерно так:

class ViewController1: UIViewController {
   //...
   var displayedVC1: DisplayedViewControllerTab1?
   //...
}

А теперь ваш код:

var data: ModelData?  
if let navController = tabBarController.viewControllers?[0] as? NavController1, 
   let childNavVC = navController.children.first as? ViewController1 {
     data = childNavVC.displayedVc1
}

PS Для удобства, если у вас есть свой собственный класс TabBarController вы можете добавить все ссылки, которые вам нужны, когда контроллер создан или просто имеет вычисленные свойства, поэтому вам не нужно все время углубляться в иерархию go.

В вашем TabbarViewController класс:

var myViewController1: MyViewControllerOne? {
   return (viewControllers[0] as? NavController)?.children.first as? MyViewControllerOne
}
var myViewController2: MyViewControllerTwo? {
   return (viewControllers[1] as? NavController)?.children.first as? MyViewControllerTwo
}
...