使用 segue 的参数调用函数
Posted
技术标签:
【中文标题】使用 segue 的参数调用函数【英文标题】:Calling function with argument from segue 【发布时间】:2017-11-21 22:19:25 【问题描述】:我有一个带有表格视图的 FirstVC,它与另一个 SecondVC 相连,我在其中传递了按下单元格的名称。在 SecondVC 中,我有另一个要填充数据的 tableview。我有一个名为 gettingUrls() 的函数,它正在为我的表格视图提取数据:
DataService.instance.mainRef.child("Folders").child("\(folderName)").observeSingleEvent(of: .value) (snapshot: DataSnapshot) in...
其中“文件夹名称”是来自 FirstVC 的值。此功能实现为“拉动刷新功能”,效果很好。但是,当我尝试在 viewDidLoad 中运行该函数本身时,由于文件夹名称为空,它会不断使应用程序崩溃。我只是不明白为什么此时来自 segue 的值在刷新函数中可用,而不在 viewDidLoad 中。
这是segue的代码:
let detailVC = self.storyboard?.instantiateViewController(withIdentifier: "DetailVC") as! DetailVC
self.navigationController?.pushViewController(detailVC, animated: true)
self.present(detailVC, animated: true, completion: nil)
detailVC.folderName = fileName
如何在 viewDidLoad 中运行函数?
【问题讨论】:
【参考方案1】:在设置folderName
属性之前,您正在呈现DetailVC
的视图。视图已加载,但还没有folderName
,因此程序崩溃。您应该在呈现DetailVC
之前放置detailVC.folderName = fileName
行。
您也不需要第 2 行和第 3 行 - 要么呈现新的视图控制器,要么将其推送到导航堆栈,而不是两者。
【讨论】:
在 DetailVC 显示之前我可以通过什么方式放置它?我敢打赌这个问题很愚蠢,但我是 swift 新手。 放在self.navigationController?.pushViewController(detailVC, animated: true)
之前。那是显示 DetailVC 的行。
哇,原来这么简单!非常感谢:)
没问题!既然它解决了你的问题,你能接受这个答案作为解决方案吗?【参考方案2】:
您应该使用 segues 编写代码来推送视图控制器,例如不使用navigationController
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if (segue.identifier == "Verification")
let vc = segue.destination as! MyViewController
vc.delegate = self
vc.property = value
【讨论】:
感谢您的提示!然而,最重要的部分仍未得到解答。 ` vc.delegate = self ` 会做到的【参考方案3】:所以在@haarismuneer 的帮助下,在初始化 SecondVC 之前传递变量就足够了:
detailVC.folderName = fileName
self.navigationController?.pushViewController(detailVC, animated: true)
【讨论】:
以上是关于使用 segue 的参数调用函数的主要内容,如果未能解决你的问题,请参考以下文章