2017-12-15 6 views
1

Ich brauche zwei verschiedene Registerkarten für einen UIViewController. Ich implementiere UITabBarController programmgesteuert.Wie man den gleichen ViewController für Registerkarten in UITabBarController verwendet

Code unten funktioniert wie zeigen Sie mir zwei verschiedene Tabs, aber wenn ich FirstVC wählen, hat es schwarzen Bildschirm, secondVC ist gut.

Wie kann ich zwei verschiedene Registerkarten für den gleichen ViewController verwenden?

class VPTabBarController: UITabBarController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let myWebView = WebKitViewController.storyboardInstance() 

     let mainVC = MainViewController.storyboardInstance() 
     mainVC?.tabBarItem.title = "Search" 
     mainVC?.tabBarItem.image = UIImage(named:"search") 

     let firstVC = myWebView 
     firstVC?.source = "first" 
     let accountNavigationVC = UINavigationController(rootViewController: firstVC!) 
     accountNavigationVC.tabBarItem.title = "First" 
     accountNavigationVC.tabBarItem.image = UIImage(named:"first") 

     let secondVC = myWebView 
     secondVC?.source = "second" 
     let myTripsNavigationVC = UINavigationController(rootViewController: secondVC!) 
     myTripsNavigationVC.tabBarItem.title = "Second" 
     myTripsNavigationVC.tabBarItem.image = UIImage(named:"Second") 

     let viewControllerList = [ mainVC, firstVC, secondVC ] 

     viewControllers = viewControllerList as? [UIViewController] 
    } 
} 

Antwort

1

Ich denke, man es durch die Schaffung von zwei Wrapper View-Controller hacken kann, die in der Ansicht nichts anderes, nur die myWebView ‚s Ansicht, die Sie auf beiden Registerkarten haben wollen enthalten würde. Erstellen Sie nun zwei Instanzen dieses Wrappers, die beide die gleiche myWebView als Subview enthalten.

Jetzt müssen Sie daran denken, dass die gleiche Ansicht nicht eine Unteransicht von zwei verschiedenen Ansichten sein kann (es kann nur eine Superansicht haben). Durch Hinzufügen der myWebView.view als Unteransicht zu einem Wrapper entfernt es von seiner vorherigen Superview. Daher müssen Sie die Tab-Änderungen abhören, um sie wieder hinzuzufügen, wenn ein Wrapper angezeigt wird (jedes Mal, wenn ein Wrapper angezeigt wird, müssen Sie dem dargestellten Wrapper myWebView als Unteransicht hinzufügen).

Verwandte Themen