web-dev-qa-db-ja.com

Swift内のタブ間のプログラムによる切り替え

IOSアプリの起動時にビューを別のタブに切り替えるためのコードを記述する必要があります(たとえば、最初のタブではなくデフォルトで2番目のタブが表示されます)。

私はSwiftを初めて使い、次のことを解決しました。

  • コードは、おそらく最初のタブのViewControllerのfunc viewDidLoad()関数をオーバーライドする必要があります。

  • 次のコードは、2番目のViewControllerを示していますが、下部にタブバーはありません(vcOptionsは2番目のViewControllerタブ項目です:

let vc : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("vcOptions")
self.showViewController(vc as UIViewController, sender: vc)

答えはUITabbarController.selectedIndex = 1を使用することにあると思いますが、これを実装する方法はよくわかりません。

52
Oliver Spencer

windowrootViewControllerUITabbarControllerである場合(ほとんどの場合)、tabbarファイルのdidFinishLaunchingWithOptionsにあるAppDelegateにアクセスできます。

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
    // Override point for customization after application launch.

    if let tabBarController = self.window!.rootViewController as? UITabBarController {
        tabBarController.selectedIndex = 1
    }

    return true
}

これにより、indexselectedIndexが指定された(1)のタブが開きます。

viewDidLoadfirstViewControllerでこれを行う場合、選択したタブを追跡するためのフラグまたは別の方法で管理する必要があります。 didFinishLaunchingWithOptionsファイルのAppDelegateまたはrootViewControllerカスタムクラスviewDidLoadでこれを行うのに最適な場所です。

99
codester

1. UITabBarControllerを置き換える新しいクラスを作成します。例えば:

class xxx: UITabBarController {
override func viewDidLoad() {
        super.viewDidLoad()
}

2.次のコードを関数viewDidLoad()に追加します。

self.selectedIndex = 1; //set the tab index you want to show here, start from 0

3.ストーリーボードに移動し、Tab Bar Controllerのカスタムクラスをこの新しいクラスに設定します。 (写真の例としてMyVotes1)

enter image description here

30
WTIFS

Swift

このコードをtabBarControllerのデフォルトのView Controller(index 0)に追加できます。

    override func viewWillAppear(_ animated: Bool) {
        _ = self.tabBarController?.selectedIndex = 1
    }

ロード時に、これはタブをリストの2番目の項目に自動的に移動しますが、ユーザーはいつでも手動でそのビューに戻ることもできます。

24
Ponyboy

@codesterの答えを拡張するには、チェックしてから割り当てる必要はありません。1ステップで行うことができます。

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
    // Override point for customization after application launch.

    if let tabBarController = self.window!.rootViewController as? UITabBarController {
        tabBarController.selectedIndex = 1
    }

    return true
}
18
Anorak

ViewControllerはITabBarControllerDelegateの子である必要があります。したがって、次のコードをSwiftに追加するだけです。

self.tabBarController?.selectedIndex = 1
14
Leo Paim

典型的なアプリケーションにはUITabBarControllerがあり、3つ以上のUIViewControllerをタブとして埋め込みます。このような場合、UITabBarControllerをYourTabBarControllerとしてサブクラス化すると、選択したインデックスを簡単に設定できます:

selectedIndex = 1 // Displays 2nd tab. The index starts from 0.

他のビューからYourTabBarControllerに移動している場合、そのビューコントローラーのprepare(for segue :)メソッドで次のことができます。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
        if segue.identifier == "SegueToYourTabBarController" {
            if let destVC = segue.destination as? YourTabBarController {
                destVC.selectedIndex = 0
            }
        }

Xcode 10およびSwift 4.2でタブを設定するこの方法を使用しています。

4
Pankaj Kulkarni