web-dev-qa-db-ja.com

Swiftでプログラム的にタブバーを切り替える

タブバーアプリケーションがあり、タブバーでプログラムで2番目のタブに切り替えると、最初のビューにボタンがあります。

私はインデックスなどを取得してそれに切り替える方法を理解することはまったくできないようです。私はこのようなものを試しました。

tababarController.selectedIndex = 1

成功なし。

44
Azabella

これは非常に単純なtabBarControllerがオプションの型として宣言されている

var tabBarController: UITabBarController? { get }

View Controller階層でTab Bar Controllerである最も近い祖先。 View Controllerまたはその祖先の1つがTab Bar Controllerの子である場合、このプロパティには所有Tab Bar Controllerが含まれます。 View ControllerがTab Bar Controller内に埋め込まれていない場合、このプロパティはnilです。

したがって、「?」を追加するだけです。最後に:

@IBAction func goToSecond(_ sender: Any) {
    tabBarController?.selectedIndex = 1
}
102
Leo Dabus

スウィフト3:

func switchToDataTab() {
    Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
}

func switchToDataTabCont(){
    tabBarController!.selectedIndex = 0
}

Swift 4+:

func switchToDataTab() {
        Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
    }

@objc func switchToDataTabCont(){
        tabBarController!.selectedIndex = 0
    }
8
Darryl Lopez

Leo Dabusが提供するソリューション(上記参照)は、私にとってはうまく機能します。ただし、一部のコントロールには悪い状態があります。それを修正することはできませんが、この小さな回避策はすべてあなたに良いでしょう:

func switchToDataTab(){
    NSTimer.scheduledTimerWithTimeInterval(0.2,
        target: self,
        selector: "switchToDataTabCont",
        userInfo: nil,
        repeats: false)
}

func switchToDataTabCont(){
    tabBarController!.selectedIndex = 0
}
4

Anthonyのコードに追加:

func switchToDataTab(){
    NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil,repeats: false)
}

func switchToDataTabCont(){
    tabBarController!.selectedIndex = 0
}

セレクタークラスが変更された場所

#selector(switchToDataTabCont)
2
dnaatwork.com