快速设置UITabBar中的默认选项卡

Posted

技术标签:

【中文标题】快速设置UITabBar中的默认选项卡【英文标题】:Setting default tab in UITabBar in swift 【发布时间】:2015-05-04 20:50:40 【问题描述】:

我几乎完成了一个项目,并且正在解决最后几个 UI 问题。我的应用程序使用标签栏进行导航,出于美学目的,我希望应用程序在最后一个选项卡(用户配置文件)而不是第一个选项卡上打开。我知道我可以在 Interface Builder 中重新排序选项卡,但选项卡栏看起来很奇怪,首先是配置文件选项卡,然后是其他任何地方的主页选项卡。如何将配置文件选项卡保留为第 5 个选项卡,但默认情况下在该选项卡上打开应用程序?

【问题讨论】:

【参考方案1】:

有一个很好的方法可以直接从标签栏控制器上的界面构建器点击身份检查器,并设置用户定义的运行时属性。

在这种情况下,标签栏控件的每个索引都像一个基于 0 的数组一样被索引。所以最左边是0,右边是1,然后是2……

所以在我的情况下,我希望首先选择“任务”,因此您将 selectedIndex 设置为输入数字和值“1”。参考我附上的图片。

【讨论】:

在我拥有的 Xcode 8.02 版本中不起作用。无法在(UITabBarController)上设置(selectedIndex)用户定义的检查属性:无法在包中加载NIB:'NSBundle /containers/Bundle/Application/A04810EB-0867-49C8-8967-78F1506FFADF/CarePointe.app>(已加载)' 名称为 'Wje-Ny-ZcC-view-IBi-mh-pkx' 嗯,真的吗?在我目前的项目中,我现在仍在使用这种技术。我会再次检查,看看是否还有问题。 如果您可以提供有关您所看到的错误的更多详细信息,也许可以发布您的示例项目,我可以看看可能导致它的原因。【参考方案2】:

只需设置 tabBarController 的 selectedIndex 即可。沿着这些思路。

var freshLaunch = true
override func viewWillAppear(animated: Bool) 
     if freshLaunch == true 
         freshLaunch = false
         self.tabBarController.selectedIndex = 4 // 5th tab
     

【讨论】:

如果您在 viewDidLoad() 中添加此代码而不是 viewWillAppear() 则不需要布尔变量。【参考方案3】:

如果您使用来自UIStoryBoardUISegue,您可以在执行UISegueUIViewController 中使用它

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    let tabBarController = segue.destination as? UITabBarController
    tabBarController?.selectedIndex = 1

class TabBarController: UITabBarController 

   override func viewDidLoad() 
       super.viewDidLoad()
       self.selectedIndex = 1
   


此代码在您的UITabBarController 本身中。

【讨论】:

【参考方案4】:

在第一个项目视图控制器中写入

tabBarController?.selectedIndex = 2//required value

【讨论】:

这只会突出显示标签栏中的第三个标签,但不会切换到关联的视图。 (XCode 10.1)

以上是关于快速设置UITabBar中的默认选项卡的主要内容,如果未能解决你的问题,请参考以下文章

UITabBar 控制器选项卡导航到不同的 UIViewControllers

来自 UITabBar 的奇怪行为,其中背景颜色仅显示一个选项卡

如何在 Visual Studio Code 快速打开视图中设置默认选项?

iOS:如何选择 UITabBar 中的特定选项卡和此选项卡中的特定行

如何在 iPhone 上设置第一个以编程方式选择的 TabBar

Swift:如何通过快速操作从 AppDelegate 访问某个 TabBar 选项卡?