关闭具有导航控制器的视图控制器并将值传递回主视图控制器

时间:2017-10-27 13:32:44

标签: ios swift uicollectionview

我在一个名为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)
        }

现在我该如何解决这个问题。我的视觉控制器并没有贬低,价值也没有显示出来。

提前致谢〜

2 个答案:

答案 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来显示这个工作。

enter image description here

关于您的控制器未被解雇的问题,我将以下列方式呈现控制器:

let dataVC = self.storyboard?.instantiateViewController(withIdentifier: "dataviewcontroller") as! dataviewcontroller
 self.present(vc, animated: true, completion: nil)

试试这个,看看这是否有助于你:)