你不想吵架。序列创建目标视图控制器的新实例并显示它。
这就是您的标签栏消失的原因。您将使用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}
(请注意,如果要将类型的参数传递
Tab给IBAction,则该枚举必须是一个Objective-
C枚举,因为IBAction方法需要使用Objective-C类型和函数签名。)
它还包括一个协议
TabController:
@objc protocol TabController { @objc func switchTab(to: Tab)}
它还定义了一个委托
tabDelegate:
weak var tabDelegate: TabController?
标签栏控制器具有prepareForSegue(
prepare(for:sender:)),用于使其自身成为
tabDelegate所有作为标签管理的视图控制器:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let child = segue.destination as? ATabController { child.tabDelegate = self }
然后实现该
switchTab(to:)方法:
@objc func switchTab(to: Tab) { let index = to.rawValue guard let viewControllerCount = viewControllers?.count, index >= 0 && index < viewControllerCount else { return } selectedIndex = index}
在作为标签栏控制器标签的任何子视图控制器中,可以使用如下
IBAction代码来切换标签:
@IBAction func handleFirstButton(_ sender: Any) { tabDelegate?.switchTab(to: .first)}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)