【发布时间】:2015-03-21 20:34:23
【问题描述】:
我有一个标签栏应用程序,并且在我的第一个视图上有一个按钮,当按下该按钮时,我想在标签栏中以编程方式切换到我的第二个标签。
我似乎无法弄清楚如何让索引等切换到它我已经尝试过这样的东西。
tababarController.selectedIndex = 1
没有成功。
【问题讨论】:
标签: xcode swift uitabbarcontroller
我有一个标签栏应用程序,并且在我的第一个视图上有一个按钮,当按下该按钮时,我想在标签栏中以编程方式切换到我的第二个标签。
我似乎无法弄清楚如何让索引等切换到它我已经尝试过这样的东西。
tababarController.selectedIndex = 1
没有成功。
【问题讨论】:
标签: xcode swift uitabbarcontroller
很简单的 tabBarController 被声明为可选类型
var tabBarController: UITabBarController? { get }
视图控制器层次结构中最近的祖先是标签栏 控制器。如果视图控制器或其祖先之一是孩子 标签栏控制器,此属性包含拥有的标签栏 控制器。如果视图控制器不是,则此属性为零 嵌入在标签栏控制器中。
所以你只需要添加“?”最后:
@IBAction func goToSecond(_ sender: Any) {
tabBarController?.selectedIndex = 1
}
【讨论】:
selectedIndex = 1
Leo Dabus 提供的解决方案(见上文)对我来说效果很好。但是 - 一些控件的状态不好。无法解决这个问题,但是这个小解决方法对你们都有好处:
func switchToDataTab(){
NSTimer.scheduledTimerWithTimeInterval(0.2,
target: self,
selector: "switchToDataTabCont",
userInfo: nil,
repeats: false)
}
func switchToDataTabCont(){
tabBarController!.selectedIndex = 0
}
【讨论】:
UITableView 状态没有改变,甚至 tableView.reloadData() 也被调用了。 Tx 提供了解决方法!您可能想到了它背后的推理还是更好的解决方案?
添加到安东尼的代码:
func switchToDataTab(){
NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil,repeats: false)
}
func switchToDataTabCont(){
tabBarController!.selectedIndex = 0
}
选择器类已更改为
#selector(switchToDataTabCont)
【讨论】:
斯威夫特 3:
func switchToDataTab() {
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
}
func switchToDataTabCont(){
tabBarController!.selectedIndex = 0
}
斯威夫特 4+:
func switchToDataTab() {
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
}
@objc func switchToDataTabCont(){
tabBarController!.selectedIndex = 0
}
【讨论】: