解雇后如何以编程方式更改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选定的索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式更改 swiftUI DatePicker 的选定值
UITableView中的UITabBar MoreViewController图像在以编程方式选择后消失
当 UITabBar 不是 rootViewController 时,如何以编程方式将 UITabBar 与具有 NIB 的不同 ViewController 链接