解雇后如何以编程方式更改UITabBar选定的索引?

Posted

技术标签:

【中文标题】解雇后如何以编程方式更改UITabBar选定的索引?【英文标题】:How to programmatically change UITabBar selected index after Dismiss? 【发布时间】:2017-06-12 03:44:19 【问题描述】:

我在UITabBarViewcontroller 上有一个模态UIViewController,我想关闭它,然后更改我的标签栏的选定项。

我正在尝试通过将selectedIndex 设置在dismiss'完成中来完成它:

self.dismiss(animated: true, completion: 
    self.tabBarController?.selectedIndex = 2        
)

如果这是一个新手问题,我深表歉意,我只是无法在任何地方找到解决方案。提前感谢您发送给我的每一个答案、线索或类似的老问题 :)

【问题讨论】:

你能给我们看看你的故事板吗?你想解雇哪个视图控制器?因为 uivewcontroller 和你想解雇它很难理解 一切都以编程方式完成。我有这个“MainScreen”,它是一个UITabBarController,有 4 个项目。在某些时候,我使用模态 segue 将 UIViewController 放置在此 MainScreen 上(这有点像一个动作)。当我拒绝它时,我想为 TabBar 设置另一个 selectedIndex,但我找不到方法。 当您关闭视图控制器时,您将无法获取 ViewController 的实例 我试图获取UITabBarController 的实例,它以模态方式调用UIViewController。我已经找到了解决方案,请在下面查看我的答案。 【参考方案1】:

我能够通过在关闭之前保存presentingViewController(调用模态segue的视图控制器)的引用来解决这个问题,然后使用它在完成中设置selectedIndex。像这样:

let referenceForTabBarController = self.presentingViewController as! UITabBarController
self.dismiss(animated: true, completion: 
     referenceForTabBarController.selectedIndex = 2
)

【讨论】:

【参考方案2】:

完成块在视图控制器被解除后执行。这意味着您的视图不再出现在屏幕上。所以你需要在完成块中创建新实例

self.dismiss(animated: true, completion: 
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let tabBarController = appDelegate.window?.rootViewController as! UITabBarController
        tabBarController.selectedIndex = 2
    )

【讨论】:

【参考方案3】:

如果您想将代码放入按钮操作或为 tableview 或 collectionview 选择项目 - swift 4.2

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let tabBarController = appDelegate.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 2

【讨论】:

以上是关于解雇后如何以编程方式更改UITabBar选定的索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UITabbar 选定的颜色?

如何以编程方式更改 swiftUI DatePicker 的选定值

如何以编程方式在RadioGroup上设置选定的索引?

UITableView中的UITabBar MoreViewController图像在以编程方式选择后消失

如何以编程方式使用 UITabBar

当 UITabBar 不是 rootViewController 时,如何以编程方式将 UITabBar 与具有 NIB 的不同 ViewController 链接