以编程方式切换选项卡时清除根视图控制器的变量

Posted

技术标签:

【中文标题】以编程方式切换选项卡时清除根视图控制器的变量【英文标题】:clearing variables of root view controller when switching tabs programmatically 【发布时间】:2019-05-14 21:53:28 【问题描述】:

我有一个故事板/根视图控制器作为我应用程序的第三个选项卡。在该选项卡上,用户选择一个图像,并编写一个标题,这些标题作为变量存储。从根视图控制器,用户通过传递变量(即图像和文本)的 segue 被带到预览屏幕。用户从此屏幕发布对象。从发布按钮,我弹出视图控制器,并以编程方式导航到我的应用程序的第一个选项卡。一切正常,但问题是当我导航回第三个选项卡时,存储的变量仍然存在,我希望将它们清除。

我看过很多关于保留变量的帖子,但没有关于如何重置它们的帖子。我尝试使用 viewWillDissapear,但我不希望在使用 segue 时清除它们,因为我希望用户能够返回并在需要时进行一些更改。

正确答案的更新代码

@IBAction func postButtonPressed(_ sender: Any) 




        PostFunction.createPost(image: self.postImage, postText: self.hashtag)  (true) in


            self.tabBarController?.selectedIndex = 0

            let tab3 = self.tabBarController!.viewControllers![2] as! UINavigationController
            let vc = tab3.viewControllers.first as! PostHomeVC
            vc.clear()

            self.navigationController?.popViewController(animated: false)
        
    

关于如何从上述方法“重置”rootviewcontroller 有什么建议吗?

谢谢!

【问题讨论】:

【参考方案1】:

我正在弹出视图控制器,并以编程方式导航到我的应用程序的第一个选项卡

在以编程方式切换到第一个选项卡之前

let tab3 = self.tabBarController.viewControllers[2] as! UINavigationController
let vc = tab3.viewControllers.first as! VCName
vc.clear()

let vc = self.navigationController!.viewControllers.first as! VCName
vc.clear()

并根据需要在 vc 中编写 clear 方法

【讨论】:

感谢您的快速响应,我一直在使用建议的解决方案,但没有成功。当我实现上述内容时,它使 self.tabBarController?.selectedIndex = 0 不再起作用。知道为什么会这样吗? 只需要稍微改变一下顺序,否则你就对了,谢谢你的帮助!

以上是关于以编程方式切换选项卡时清除根视图控制器的变量的主要内容,如果未能解决你的问题,请参考以下文章

切换选项卡时删除所有子视图控制器并移至父视图控制器 IOS 目标 c

在 UITabView 中切换选项卡时,视图控制器与 IBOutlets 中的约束失去连接

如何以编程方式关闭展开的表格视图单元格?

以角度切换选项卡时保持选项卡状态

切换选项卡时未调用 NSFetchedResultsControllerDelegate 方法

以编程方式更改 TabViewController 中的选定选项卡