2016-06-09 9 views
0

Ich entwickle eine App, die sowohl eine Tab-Leiste als auch eine Nav-Leiste verwendet. Im Moment werden beide auf der ersten Seite angezeigt, die für die App geladen wird, aber nur die Tab-Leiste wird angezeigt, wenn ich zu verschiedenen Tabs navigiere.Nav-Leiste, die nur auf der ersten Seite angezeigt wird iOS Swift

Mein Problem ist, dass ich mir nicht ganz sicher bin, wo die Nav-Leiste eigentlich angezeigt werden soll. Ich habe Posts darüber gesehen, dass ich die Navigationsleiste und die Tableiste zusammenbinden muss, aber ich habe sie nicht vollständig verstanden und der Versuch, sie zu implementieren, führte dazu, dass meine App überhaupt nicht geladen wurde. Sollte ich die Nav-Leiste in jedem View-Controller instanziieren?

Das ist mein AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Initialize the window 
    window = UIWindow.init(frame: UIScreen.mainScreen().bounds) 

    // Set Background Color of window 
    window?.backgroundColor = UIColor.whiteColor() 

    // Make the window visible 
    window!.makeKeyAndVisible() 

    // Create TabBarController 
    let tabBarController = CustomTabBarController() 
    window?.rootViewController = tabBarController 

    return true 
} 

Das ist mein CustomTabBarController.swift:

override func viewWillAppear(animated: Bool) { 

    // color TabBar correctly 
    let darkTeal = UIColor(red:0.09, green:0.62, blue:0.56, alpha:1.0) 
    let lightTeal = UIColor(red:0.6, green:0.78, blue:0.74, alpha:1.0) 
    UITabBar.appearance().barTintColor = darkTeal 
    UITabBar.appearance().tintColor = UIColor.whiteColor() 
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.whiteColor()], forState:.Normal) 

    // customize TabBarItem width 
    let tabBarItemWidth = UIScreen.mainScreen().bounds.width/CGFloat(4) 
    UITabBar.appearance().selectionIndicatorImage = 
     UIImage().makeImageWithColorAndSize(lightTeal, size: CGSize(width: tabBarItemWidth, height: 49.0)) 

    // create Tab Bar items 
    let findOutVC = FindOut() 
    let goOutVC = GoOut() 
    let speakOutVC = SpeakOut() 
    let reachOutVC = ReachOut() 

    // images 
    let findout = UIImage(named: "find_out") 
    let goout = UIImage(named: "go_out") 
    let speakout = UIImage(named: "speak_out") 
    let reachout = UIImage(named: "reach_out") 

    // modify tabBar items 
    findOutVC.tabBarItem = UITabBarItem(
     title: "Find Out", 
     image: findout, 
     tag: 1) 
    goOutVC.tabBarItem = UITabBarItem(
     title: "Go Out", 
     image: goout, 
     tag: 2) 
    speakOutVC.tabBarItem = UITabBarItem(
     title: "Speak Out", 
     image: speakout, 
     tag: 3) 
    reachOutVC.tabBarItem = UITabBarItem(
     title: "Reach Out", 
     image: reachout, 
     tag: 4) 

    // set up tabBar items 
    let tabs = [findOutVC, goOutVC, speakOutVC, reachOutVC] 
    self.viewControllers = tabs 

} 

Und das ist mein CustomNavBarController.

override func viewDidAppear(animated: Bool) { 
    // Do any additional setup after loading the view. 
    let navigationBar = UINavigationBar(frame: CGRectMake(0, 20, self.view.frame.size.width, 44)) 

    // change color of nav bar 
    let lightTeal = UIColor(red:0.6, green:0.78, blue:0.74, alpha:1.0) 
    navigationBar.barTintColor = lightTeal 
    navigationBar.translucent = true 
    navigationBar.delegate = self 

    let navigationItem = UINavigationItem() 
    navigationItem.title = "shOUT" 

    // left button 
    let leftButton = UIBarButtonItem(title: "Info", style: UIBarButtonItemStyle.Done, target: self, action: "openInfo") 
    let info = UIImage(named: "info") 
    leftButton.image = info 
    navigationItem.leftBarButtonItem = leftButton 

    // right button 
    let rightButton = UIBarButtonItem(title: "Pencil", style: UIBarButtonItemStyle.Done, target: self, action: "openWrite") 
    let pencil = UIImage(named: "pencil") 
    rightButton.image = pencil 
    navigationItem.rightBarButtonItem = rightButton 

    navigationBar.barStyle = UIBarStyle.Black 

    navigationBar.items = [navigationItem] 
    self.view.addSubview(navigationBar) 
} 
+0

Warum setzen Sie Frame von UINavigationBar? Ist CustomNavBarController Kind von UINavigationcontroller? –

+0

Ja ist es, sollte es nicht sein? –

+0

Der Rahmen für die Tableiste muss nicht festgelegt werden. –

Antwort

0

Ich schlage vor, Sie NavigationController innerhalb des TabBarController einzubetten. Insbesondere sollten Sie eine NavigationController für jede Registerkarte, die Sie in Ihrem TabBarController haben, einfügen. Auf diese Weise wird Ihr NavigationBar immer während Ihrer Navigation innerhalb der Registerkarten und der TabBar auch sichtbar sein.

Hier ist ein Bild davon, wie Ihr Drehbuch aussehen sollte:

enter image description here

Prost!

+0

Haben Sie Vorschläge, wie Sie das programmatisch machen? –

+0

Nicht wirklich .. Das Storyboard ist ein sehr mächtiges Werkzeug, auch wenn es manchmal ein bisschen unordentlich wird. Es ermöglicht Ihnen, viele Dinge zu vermeiden, die Sie die meiste Zeit vergessen haben .. Ich schlage vor, es zu benutzen;) –