2016-11-06 13 views
2

Swift 3.0に5つのタブを持つカスタムUITabBarControllerを作成しました。特定のタブに対して異なるナビゲーションバーの項目を設定しようとしていましたが、うまく機能しません。Swift:異なるタブ用に異なるナビゲーションバーボタンを設定する

状況:各タブのviewDidLoad()でナビゲーションバーボタンを変更するコードを配置しました。

//The customized Tab Bar controller instance. Contained in each of the tabs. 
var mainController: TabBarController? 

override func viewDidLoad() { 
    // ... more code 
    setupNavBar() 
    // ... more code 
} 

func setupNavBar() { 
    // ... more code 
    mainController?.navigationItem.leftBarButtonItem = UIBarButtonItem(image: friendsImage, style: .plain, target: self, action: #selector(handleFindFriends)) 
    // ... more code 
} 

問題:私はタブ#2にタブ#1から切り替えるとNavBarButton B. を持っていることになっている、コードが正常に動作しますのは、タブ#1がNavBarButton Aおよびタブ#2を持っていることになっているとしましょう。 NavBarButtonがAからBに変更されます。 しかし、Tab#1をクリックすると、NavBarButtonはまだBのままです。

タブをクリックしてもナビゲーションバーのボタンが変わるようにする方法以前は?

+1

は、各タブの1 TabBarControllerと(NavigationController>のViewController)を作成してみましょう。したがって、各ViewControllerにbarButtonItemを追加できます。 –

+0

私の答えにコードを追加しました。どうぞご覧ください。 –

答えて

1

私は実際にTabBarControllerで解XD が見つかりました:まだ

override func viewWillAppear(_ animated: Bool) { 
    //Original code to set up tabs 

    //Code I added: 
    for i in 0...4 { 
     tabBar.items?[i].tag = i 
    } 
} 
//Code I added: 
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
    //Code to run when a certain tab is selected 
} 

を、どうもありがとう!

2

UITabBarController(またはそのサブクラス)をUIViewControllerに埋め込むとします。これは間違っています。なぜなら、この場合は通常、View Controllerを一般的に悪い方法にする傾向があるからです。

代わりに、以下の画像に表示されているものにView Controllerの階層を変更することをお勧めします。

enter image description here

UPDATE

あなたはコードでそれを行う場合:

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

     let tabBarController = UITabBarController() 

     // first tab 
     let firstViewController = UIViewController() 
     _ = firstViewController.view 
     firstViewController.title = "First" 
     let firstNavigationController = UINavigationController(rootViewController: firstViewController) 

     // sets a specific button ("Friends") on a navigation bar for the first screen 
     firstViewController.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Friends", style: .plain, target: nil, action: nil) 

     // second tab 
     let secondViewController = UIViewController() 
     _ = secondViewController.view 
     secondViewController.title = "Second" 
     let secondNavigationController = UINavigationController(rootViewController: secondViewController) 

     // sets a specific button ("Photos") on a navigation bar for the second screen 
     secondViewController.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Photos", style: .plain, target: nil, action: nil) 

     // embeds the navigation controllers into the tab bar controller 
     tabBarController.viewControllers = [firstNavigationController, secondNavigationController] 

     // creates a window with the tab bar controller inside 
     window = UIWindow(frame: UIScreen.main.bounds) 
     window?.rootViewController = tabBarController 
     window?.makeKeyAndVisible() 

     return true 
    } 

} 
+0

それは私の答え、素敵な仕事のイメージそれは@ Artem Stepanenko – emresancaktar

関連する問題