呈现特定的 TabBarItem - iOS

Posted

技术标签:

【中文标题】呈现特定的 TabBarItem - iOS【英文标题】:Presenting particular TabBarItem - iOS 【发布时间】:2019-01-23 06:25:50 【问题描述】:

我有一个 UITabBarController 和四个 TabBaritem,我在每个 ViewConrollers 中都有 leftMenu。左侧菜单选择导致呈现每个 ChildViewController。所以我使用 NavigationController 来呈现每个子视图控制器,同时点击左侧菜单行。 但问题是,选定的TabBarItem 不会改变,而新选定的TabBarItem 呈现在同一个ViewController 中,即我选择了ChildViewContrller 的控制器。

例如:如果我在 secVC 中并选择左侧菜单导航到 firstVC 它在 sec tabBarItem.and 出现 firstVc,如果我在一些功能之后 我再次点击 sec tabBarItem 它将显示 firstVC。但是我有 在 First tabBarItem 中显示 FirstVc

我的左侧菜单选择代码是,

if sender.tag == 0 
    let navVc = self.storyboard?.instantiateViewController(withIdentifier: "HomeVC")as? HomeVC
    self.navigationController?.pushViewController(navVc!, animated: true)

else if sender.tag == 1 
    let navVc = self.storyboard?.instantiateViewController(withIdentifier: "TileDetailsVC")as? TileDetailsVC
    navVc?.leftMenuPrdctId = 1
    self.navigationController?.pushViewController(navVc!, animated: true)

else if sender.tag == 2 
    let navVc = self.storyboard?.instantiateViewController(withIdentifier: "OrderHistoryVC")as? OrderHistoryVC
    self.navigationController?.pushViewController(navVc!, animated: true)

else if sender.tag == 3 
    let navVc = self.storyboard?.instantiateViewController(withIdentifier: "TileDetailsVC")as? TileDetailsVC
    navVc?.leftMenuPrdctId = 3
    self.navigationController?.pushViewController(navVc!, animated: true)

else if sender.tag == 5 
    let navVc = self.storyboard?.instantiateViewController(withIdentifier: "SettingsVC")as! SettingsVC
    self.navigationController?.pushViewController(navVc, animated: true)

请任何人帮助我了解如何在点击左侧菜单行时呈现特定的 tabBarItem。

【问题讨论】:

【参考方案1】:

您可以,正如 Diksha Bhargava 所说,只需更改 UITabBarController 的选定索引,新的视图控制器就会显示出来。改变选中的索引会改变选中的视图控制器,选中的视图控制器就是UITabBarController中显示的并且其tab被选中的那个。

因此更改 UITabBarController 的选定索引会更改视图控制器和选定选项卡。

这样做:

yourUITabBarController.selectedIndex=x
//where x is the index of the desired view controller 
//in the array of viewControllers the tab bar has

(默认选择的视图控制器应该对应于选择的选项卡,包括它的变化)

实际上将在该选项卡上显示视图控制器,并在选项卡栏中使用其选项卡栏项目。 以编程方式更改标签栏控制器的显示视图控制器的简单方法。

您可以在 UITabController 上查看苹果的文档并查看以下信息:

选定索引

selectedViewController

【讨论】:

【参考方案2】:

您可以直接导航到 tabar 控制器。试试这个:

 let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let nav = mainStoryboardIpad.instantiateViewControllerWithIdentifier("tabBarController") as! UINavigationController
       self.navigationcontroller.pushViewController(nav, animated: true)

【讨论】:

【参考方案3】:

您必须将 tabBarController selectedIndex 设置为相应的选项卡编号。例如,如果您从选项卡 1 导航到选项卡 2,则必须将 selectedIndex = 1 设置为索引从 0 开始。所以 tab1 索引是 0 tab4 索引是 3 等等。例如:

yourTabBarController?.selectedIndex = 1 // put your desired index number here to change the selected tab bar item

希望对你有帮助!

【讨论】:

这只会改变选择颜色。请参考我编辑的问题(示例) 在设置选定索引后尝试将 selectedViewController 设置为 root 让 navController = yourTabBarController?.selectedViewController 为? UINavigationController navController?.popToRootViewController(animated: true) 这里选择了什么VC? 它是一个视图控制器,如果存在,它可能会返回“更多”导航控制器。

以上是关于呈现特定的 TabBarItem - iOS的主要内容,如果未能解决你的问题,请参考以下文章

2 ViewControllers 以模态方式呈现 UITabBarController

点击禁用的 TabBarItem

在 tabBarItem 上添加 GIF

iOS Swift tabBarItem 与 tabBar 边框相交

如何判断 TabBarItem 是不是已被选中

如何在 UITabBar 中显示六个 TabBarItem