我在一个名为get value的按钮中有mainViewcontroller
。然后我调用dataviewcontroller
来选择集合视图单元格中的任何项目。一旦用户选择任何单元格。特定dataviewcontroller
将被解雇并且在解雇时它将具有用户选择的项目名称,它将显示在mainViewcontroller
中。现在视图控制器没有被解雇。
这里是代码:
在我的mainViewcontroller
:
var SelectedName: String? = ""
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
currentTF.text = SelectedName
}
现在dataviewcontroller
:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if collectionView.cellForItem(at: indexPath) != nil {
selectedNamesss = allitems[indexPath.row] as String
}
calldismiss()
print(selectedNamesss)
}
func calldismiss() {
if let presenter = presentingViewController as? mainViewcontroller {
presenter.SelectedName = selectedNamesss
}
dismiss(animated: true, completion: nil)
}
现在我该如何解决这个问题。我的视觉控制器并没有贬低,价值也没有显示出来。
提前致谢〜
答案 0 :(得分:1)
我的建议是使用“UnwindSegue”技术,它的工作方式与“PerformSegue”类似,因此您可以使用prepare for segue轻松发回值,并将返回主控制器。 Here is tutorial for unwind segue。或者你可以从谷歌找到更多。
答案 1 :(得分:0)
对于未显示数据的问题,问题出在以下情况:
if let presenter = presentingViewController as? mainViewcontroller {
presenter.SelectedName = selectedNamesss
}
这种情况永远不会成立,因为presentViewController总是一个UINavigationController。所以你需要改变它可能是这样的:
if let presenter = (presentingViewController as! UINavigationController).viewControllers.first! as? mainViewcontroller {
presenter.SelectedName = name
}
我在这里使用viewControllers.first!条件为mainViewcontroller是viewControllers数组的第一个索引。检查viewControllers数组并找到mainViewcontroller的索引并相应地进行更改。
我做了这些更改,代码对我有用。我在mainViewcontroller上获得了所选名称。
另外我想提一下,这不是向后传输数据的正确方法。您可以使用委托,块或解除segue来实现此目的。
虽然这是有效的,但我附上了一个gif来显示这个工作。
关于您的控制器未被解雇的问题,我将以下列方式呈现控制器:
let dataVC = self.storyboard?.instantiateViewController(withIdentifier: "dataviewcontroller") as! dataviewcontroller
self.present(vc, animated: true, completion: nil)
试试这个,看看这是否有助于你:)