我没有问题实际执行segue,但是当我这样做时,我的标签栏从视图的底部消失.我已经从TabBarController1到TabBarController2创建了一个故事板segue.
我已经为Objective-C找到了很多答案,但没有为Swift找到答案.
这是执行segue的代码:
if requestsArray.count == 0 {
self.performSegueWithIdentifier("offerSegue", sender: self)
} else {
self.performSegueWithIdentifier("confirm1", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
Dun*_*n C 18
你不想贬低.segue创建目标视图控制器的新实例并显示它.
这就是你的标签栏消失的原因.你正在覆盖你的标签栏控制器,它有2个标签,带有你的TabBarController2的新实例.
您想切换到其他选项卡.
你想要做的是让你自己的标签栏控制器切换标签.
UIViewController 有一个属性tabBarController,可以让你到达你自己的标签栏控制器.
TabBarControllers有一个属性selectedIndex,可以让您选择一个标签栏控制器的视图控制器来成为活动视图控制器.
因此,向标签栏控制器发送一条消息,要求它切换到另一个标签.
除了OP之外的其他人已经要求提供说明如何执行此操作的示例代码.我决定创建一个示例项目来说明如何做到这一点.
您可以从Github下载它:https://github.com/DuncanMC/TabBarControllers.git
我ATabController为由标签栏控制器管理的视图控制器创建了一个UIViewController的基类.该ATabController.swift文件包含一个枚举,用于指示您要选择的选项卡:
@objc enum Tab: Int {
case first = 0
case second
case third
}
Run Code Online (Sandbox Code Playgroud)
(请注意,如果您要将类型的参数传递Tab给IBActions,则枚举必须是Objective-C枚举,因为IBAction方法需要使用Objective-C类型和函数签名.)
它还包括一个协议TabController:
@objc protocol TabController {
@objc func switchTab(to: Tab)
}
Run Code Online (Sandbox Code Playgroud)
它还定义了一个委托tabDelegate:
weak var tabDelegate: TabController?
Run Code Online (Sandbox Code Playgroud)
标签栏控制器有一个prepareForSegue(prepare(for:sender:)),它用它来表示它tabDelegate作为标签管理的所有视图控制器:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let child = segue.destination as? ATabController {
child.tabDelegate = self
}
Run Code Online (Sandbox Code Playgroud)
然后它实现了该switchTab(to:)方法:
@objc func switchTab(to: Tab) {
let index = to.rawValue
guard let viewControllerCount = viewControllers?.count,
index >= 0 && index < viewControllerCount else { return }
selectedIndex = index
}
Run Code Online (Sandbox Code Playgroud)
在任何作为选项卡栏控制器选项卡的子视图控制器中,您可以使用这样的IBAction代码来切换选项卡:
@IBAction func handleFirstButton(_ sender: Any) {
tabDelegate?.switchTab(to: .first)
}
Run Code Online (Sandbox Code Playgroud)
小智 13
如果您正在寻找如何在不使用选项卡栏的情况下在选项卡控制器中从一个选项卡更改为另一个选项卡,则可以执行此操作
tabBarController?.selectedIndex = [number of tab]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9954 次 |
| 最近记录: |