2017-12-11 7 views
1

私はストーリーボードに5つのタブバー項目を持つタブバーコントローラーを作成しました。私はタブバースタックの "viewcontrollers"配列からプログラマチックに1つのView Controllerを削除したいと思います。私はまた、私は上記のビューコントローラを削除するときに選択されたいくつかの他のタブ項目を表示するアプリをしたい。私は以下のコードで試してみましたが、動作しません。プログラムでタブコントローラーからビューコントローラーをアンロードする方法はありますか?

if let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController { 
    tabBarController.viewControllers?.remove(at: 2) 
    tabBarController.selectedIndex = 1 
} 
+0

あなたが削除したいものを欠いviewControllersの新しい配列をasigning試してみましたか? –

+0

@MilanNosáľいいえ、私はちょうど配列からビューコントローラを削除しました。それを試みます。 – subin272

+0

@MilanNosáľビューコントローラが削除されても、動作しません。 – subin272

答えて

1

再割り当てviewControllersプロパティ:

if let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController { 
    tabBarController.selectedIndex = 1 
    var controllers = tabBarController.viewControllers 
    controllers.remove(at: 2) 
    tabBarController.viewControllers = controllers 
} 

は今、このコードはOKですが、問題は次の行です。

let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController 

これにより、新しいUITabBarControllerインスタンスが作成されますが、storyboadsによってインスタンス化されたインスタンスにアクセスしたい場合は、そのインスタンスが画面に表示されます。しかし、より多くの文脈がなければ、それにアクセスする方法の提案をするのは難しいです。あなたが直接タブバーコントローラに組み込まれたのViewControllerから、このコードを呼び出すことを考えると、私はこれで始まります:

if let tabBarController = self.tabBarController { 
    tabBarController.selectedIndex = 1 
    var controllers = tabBarController.viewControllers 
    controllers.remove(at: 2) 
    tabBarController.viewControllers = controllers 
} 
+0

"instantiateViewController"行に問題がありました。このメソッドは、実際にView Controllerの新しいインスタンスを作成します。 – subin272

1

これを試してください:あなたはしたくない1なし

if let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController { 
     var viewControllers = tabBarController.viewControllers 
     viewControllers.remove(at: 2) 
     tabBarController.viewControllers = viewControllers 
     tabBarController.selectedIndex = 1 
    } 
+0

私は、デバッガをチェックインすると、View Controllerが "viewControllers"配列から削除されているのがわかります。しかし、アプリケーションはまだView Controllerを表示しており、 "viewDidLoad"は再び呼び出されません。 – subin272

0
if let tabBarController = self.tabBarController { 

    let indexToRemove = 3 

    if indexToRemove < tabBarController.viewControllers?.count { 

     var viewControllers = tabBarController.viewControllers 

     viewControllers?.remove(at: indexToRemove) 

     tabBarController.viewControllers = viewControllers 
    } 
} 
+0

デバッガをチェックインすると、ViewControllerの配列からView Controllerが削除されているのがわかります。しかし、アプリケーションはまだView Controllerを表示しており、 "viewDidLoad"は再び呼び出されません。 – subin272

関連する問題