Как передать данные из ViewController3 в ViewController1 - PullRequest
0 голосов
/ 29 сентября 2018

Я новичок в Swift, и мне было интересно, как передать данные из ViewController в ViewController, который не связан с segue.Я потратил на это 2 часа и до сих пор не могу придумать, как это сделать.

Редактировать: проблема, на которой я запутался, заключается в том, как вынуть весь накопленный ViewController, ожидая, что корневой ViewController будет в состояниипередать данные обратно в первый ViewController из ViewController3 с помощью «navigationController? .popToRootViewController (animated: false)» *

class ViewController: UIViewController, nameDelegate {
    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var textfield1: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        label1.text = "Name"
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc2 = segue.destination as! ViewController2
        vc2.middleOfTransferingName = textfield1.text!
    }

    @IBAction func buttonPressed1(_ sender: Any) {
        performSegue(withIdentifier: "go2", sender: self)
    }

    func nameThatWasEntered(name: String) {
        label1.text = name
    }
}

class ViewController2: UIViewController, nameDelegate {
    var middleOfTransferingName: String = ""

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc3 = segue.destination as! ViewController3
        vc3.transferedWithSegueLabelText = middleOfTransferingName
        vc3.namePassBack = self
    }

    @IBAction func buttonPressed2(_ sender: Any) {
        performSegue(withIdentifier: "go3", sender: self)
    }

    func nameThatWasEntered(name: String) {
    }
}

protocol nameDelegate {
    func nameThatWasEntered(name: String)
}

class ViewController3: UIViewController {
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var textfield3: UITextField!

    var transferedWithSegueLabelText: String = ""
    var namePassBack: nameDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()
        label3.text = transferedWithSegueLabelText
    }

    @IBAction func buttonPressed3(_ sender: Any) {
        namePassBack!.nameThatWasEntered(name: textfield3.text!)
        navigationController?.popToRootViewController(animated: false)
    }
}

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Я нашел способ перенести данные ViewController3 в ViewController!

var vc3 = ViewController3()

, затем сделать ViewController делегатом vc3 при загрузке.

override func viewDidLoad() {
    super.viewDidLoad()
    vc3.namePassBack = self
}

Затем вернемся к ViewController3, ядобавьте "" vc3. "" перед использованием делегата.

@IBAction func buttonPressed3(_ sender: Any) {
    vc3.namePassBack!.nameThatWasEntered(name: textfield3.text!)
    navigationController?.popToRootViewController(animated: false)
}
0 голосов
/ 29 сентября 2018

если вы используете segue, тогда используйте 'Unwind segue'

для этой записи данного кода в вашем 'A view controller'

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {

}

В B_viewcontroller, при нажатии кнопки вызова 'Unwind segue'.

Примечание: - С помощью функции Unwind вы можете отправить значение для 3ed vc на 1se vc так же, как вы отправляете значение с 1-го vc на 2-й vc

, чтобы больше перейти к этому ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...