【问题标题】:Pass data before popViewController without segue and storyboard在没有 segue 和 storyboard 的情况下在 popViewController 之前传递数据
【发布时间】:2018-01-21 00:54:40
【问题描述】:

我有两个视图控制器。主要和临时之一。第二个在不同的屏幕上执行一个操作(由pushViewController 调用)然后我弹出(popViewController)并希望显示返回的值,即字符串。

我尝试过使用协议,但它是 nil。

这是我的代码:

SecondVC.swift:

protocol ValueDelegate {
    func append(_ text: String)
}

class SecondViewController: UIViewController{

   var delegate: ValueDelegate!

   ...

   ...
   private func function(){
      if let delegate = self.delegate{
         delegate.append(value.stringValue)
      }
      navigateBack()
   }

   private func navigateBack(){
   if let navigation = self.navigationController{
      navigation.popViewController(aniamted: true)
   }
}

MainVC.swift:

class MainViewController: UIViewController, ValueDelegate {
   var secondVC = SecondViewController()

   ...
    func append(_ value: String) {
        textField.text?.append(barcode)
    }

   ...
   override func viewDidLoad(){
      super.viewDidLoad()

      self.secondVC.delegate = self
   }
}

【问题讨论】:

标签: ios uiviewcontroller uinavigationcontroller delegates


【解决方案1】:

使用这些链接可以准确了解如何在 swift 中使用协议:

您必须在第一个视图控制器中实现以下代码行:-

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showSecondViewController" {
        let secondViewController = segue.destination as! SecondViewController
        secondViewController.delegate = self
        }
    }

【讨论】:

  • ehh... 我知道但没有注意到我已经有了我的 SecondVC() 的实例。谢谢!
【解决方案2】:

我尝试过使用协议,但它是 nil。

因为你从来没有把它设置为任何东西。当您推送 SecondViewController 时,您的工作就是将其 valueDelegate 设置为 MainViewController。但你没有。

您所做的是将 另一个 SecondViewController 的 valueDelegate 设置为 MainViewController:

var secondVC = SecondViewController()
self.secondVC.delegate = self

这很愚蠢,因为secondVC 是一个不同的、新创建的 SecondViewController 实例,与您的真实界面完全没有关系。特别是,它不是被推送的 SecondViewController 实例。但这是您需要设置委托的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多