2017-07-03 3 views
1

Ich habe einen UITabBarController. Mit dem Interface Builder erstelle ich mehrere View-Controller. Diese ViewController sind alle die gleiche Klasse, aber das einzige, was sich ändert, ist ein Parameter.Initialize ViewControllers von einem UITabBarController

Ich möchte den UITabBarController erweitern, so dass ich diesen Parameter hinzufügen kann, wenn die View-Controller initialisiert werden, aber ich habe keine Ahnung, wie dies in der UITabBarController-Erweiterung zu tun. Wo ist der richtige Ort dafür ???

+0

Momentan werden Ihre Controller von 'Interface Builder' initialisiert. Wenn Sie den Controller selbst initialisieren und einige Parameter hinzufügen möchten, ist es besser, die Controller aus dem Code, nicht aus dem Interface Builder, hinzuzufügen. –

+0

das macht Sinn, aber es muss eine Möglichkeit geben, einen Parameter hinzuzufügen ... ich dachte, die Viewcontroller in der Ansicht zu laden, laden des Tabbar-Controllers und fügen Sie den Parameter dort hinzu ... aber ich fühle, dass ist schmutzig! –

+0

Schauen Sie sich den Delegierten von 'UITabbarController' an, es gibt eine Funktion [didSelectViewController] (https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621173-tabbarcontroller?language=objc), die Sie verwenden können Setzen Sie den Parameter entsprechend dem Index. Es wird jedoch jedes Mal festgelegt, wenn Sie einen Tab-Index auswählen, der angezeigt werden soll. –

Antwort

1

i auch Thema wie das konfrontiert, in denen ich Pop über View-Controller auf dem fünften Register Tab-Leiste Controller angezeigt werden soll, i verwendet, um diese:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 

    if(viewController == tabBarController.viewControllers?[4]){ 
     let storyboard : UIStoryboard = UIStoryboard(name: "AfterLogin", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "MorePopUpVC") 
     vc.modalPresentationStyle = .popover 
     let popover = vc.popoverPresentationController 
     popover?.delegate = self 
     popover?.permittedArrowDirections = .down 
     popover?.sourceView = self.tabBar 
     popover?.sourceRect = ((self.orderedTabBarItemViews()).last?.frame)! 
     vc.preferredContentSize = CGSize(width: 120, height: 132) 
     present(vc, animated: true, completion:nil) 
     return false 
    } 
    return true 
} 

dies ist, wie ich Wirkung der fünften Registerkarte ändern ,

können Sie es mögen verwenden:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 

     let storyboard : UIStoryboard = UIStoryboard(name: "YOUR STORYBOARD NAME", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "YOUR VIEW CONTROLLER IDENTIFIER") 
     if(viewController == tabBarController.viewControllers?[4]){ 
      vc.type = "PARAMETER YOU WANT" 
     } 
     present(vc, animated: true, completion:nil) 
     return false 
} 

ich denke, es hilft.

Verwandte Themen