Невозможно перенести данные обратно в ViewController

-2

У меня возникают проблемы с попыткой передать данные обратно в ViewController (от BarCodeScannerViewController до TableViewController)

SecondVC (BarCodeScannerViewController.swift):

@objc func SendDataBack(_ button:UIBarButtonItem!) {
    if let presenter = self.presentingViewController as? TableViewController {
           presenter.BarCode = "Test"
    }
    self.dismiss(animated: true, completion: nil)
}

FirstVC (TableViewController.swift):

// The result is (BarCode - )
var BarCode: String = ""

override func viewWillAppear(_ animated: Bool) {
     super.viewWillAppear(animated)
     print("BarCode - \(BarCode)")
}

Каждый раз, когда ViewWillAppear работает, значение не задано, что может вызвать эту проблему?

  • 0
    Это не вопрос.
  • 0
    Вы когда-нибудь слышали о структуре делегатов?
Теги:

1 ответ

4
Лучший ответ

Вы должны использовать шаблон делегата. Я сомневаюсь в вашем коде выше, что self.presentingViewController действительно установлен.

Пример использования шаблона делегирования для этого:

// BarCodeScannerViewController.swift

protocol BarcodeScanningDelegate {
    func didScan(barcode: String)
}

class BarCodeScannerViewController: UIViewController {
    delegate: BarcodeScanningDelegate?

    @objc func SendDataBack(_ button:UIBarButtonItem!) {
        delegate?.didScan(barcode: "Test")
    }

}

// TableViewController

@IBAction func scanBarcode() {
    let vc = BarCodeScannerViewController()
    vc.delegate = self
    self.present(vc, animated: true)
}

extension TableViewController: BarcodeScanningDelegate {
    func didScan(barcode: String) {
        print("[DEBUG] - Barcode scanned: \(barcode)")
    }
}
  • 0
    Спасибо большое) все работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню