У меня возникают проблемы с попыткой передать данные обратно в 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 работает, значение не задано, что может вызвать эту проблему?
Вы должны использовать шаблон делегата. Я сомневаюсь в вашем коде выше, что 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)")
}
}