我无法将数据从一个 VC 传递到另一个 [重复]

Posted

技术标签:

【中文标题】我无法将数据从一个 VC 传递到另一个 [重复]【英文标题】:I'm unable to pass data from one VC to another [duplicate] 【发布时间】:2017-12-12 08:36:37 【问题描述】:

我将数据从一个 VC 传递回第一个 VC。我正在使用此代码:

@IBAction func goBack(_ sender: Any) 
    dismiss(animated: true, completion: nil)
    print(self.entryField.text!)
    performSegue(withIdentifier: "sendText", sender: self)
 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    let destVC = segue.destination as! ViewController
    let printName = self.entryField.text!
    print(self.entryField.text!)
    destVC.nameToDisplay=printName

这是我的数据所在VC的代码。

我想在其中显示我的结果的 VC 的代码。

var nameToDisplay = ""

override func viewWillAppear(_ animated: Bool) 
    titleDisplay.text=nameToDisplay

我无法传递数据,我尝试打印nameToDisplay,但它给出了空字符串。

【问题讨论】:

【参考方案1】:

将值从第二个控制器传回第一个控制器的合理模式可能是这样的:

class FirstViewController: UIViewController 
    //......

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        if let secondViewController = segue.destination as? SecondViewController 
            secondViewController.nameHandler =  (name) -> Void in
                titleDisplay.text=nameToDisplay //second controller will call back here to pass the name value when it's going back.
            
        
    

    //......


class SecondViewController: UIViewController 
    //......

    var nameHandler:((_ name:String)->Void)? //a closure to call back name

    @IBAction func goBack(_ sender: Any) 
        if let name = self.entryField.text 
            self.nameHandler?(name) //call back and pass the name to the first controller
        
        dismiss(animated: true, completion: nil)
    

    //......

【讨论】:

【参考方案2】:

您正在寻找视图控制器之间的一对一通信。这可以通过 ios 中的不同方式来实现。

1- 委托

2- 块,闭包。

上述解决方案是使用块。我会和代表们一起告诉你

class FirstVC: UIViewController, PassData 
func pushVC() 
    let secondVC = SecondVC()
    secondVC.delegate = self
    self.navigationController?.pushViewController(secondVC, animated: true)


func passDataOnDismiss(data: String) 
    print(data)


protocol PassData: class 
func passDataOnDismiss(data: String)


class SecondVC: UIViewController 
    weak var delegate: PassData?
    @IBAction func didButtonPress() 
        self.delegate?.passDataOnDismiss(data: "I am passing this string back to First VC")
        self.navigationController?.popViewController(animated: true)
    

【讨论】:

我是 iOS 开发新手,你能说出我在代码中做错了什么吗?

以上是关于我无法将数据从一个 VC 传递到另一个 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 - 将数据从一个视图传递到另一个视图

如何在没有 segue 的情况下在 Swift 3 中将数据从 VC 传递到另一个?

将 ImageData 从一个视图控制器传递到另一个视图控制器

将数据从标签栏开关直接传递到另一个视图控制器

当数据从一个视图控制器传递到另一个视图控制器时,我如何能够传递图像?

以角度将数据从一个打字稿文件传递到另一个[重复]