【问题标题】:I'm unable to pass data from one VC to another [duplicate]我无法将数据从一个 VC 传递到另一个 [重复]
【发布时间】: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,但它给出了空字符串。

【问题讨论】:

    标签: ios swift segue


    【解决方案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 开发新手,你能说出我在代码中做错了什么吗?
      猜你喜欢
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2020-09-18
      • 2020-10-02
      • 1970-01-01
      • 2018-04-21
      • 2018-12-13
      相关资源
      最近更新 更多