Swift: передача данных предыдущему контроллеру viewController без открытия viewController в новом окне

таким образом, я разрабатываю приложение, а также учусь swift в то же время. Я понял, как отправить данные из secondViewController в firstViewController. По существу, я связал кнопку «done «с firstViewController, поэтому, когда я нажимаю» Done», он открывает новое окно первого viewController и дает данные, которые я передал.

Тем не менее, я ищу способ обновить firstViewController, не открывая другого окна с другим сегментом.

Лучший способ объяснить это заключается в том, что мой firstViewController имеет кнопку «Добавить», которая открывает secondViewController. Этот viewController имеет два текстовых поля, вы пишете материал в нем (я хочу, чтобы материал, написанный в этих двух текстовых полях, появился на первом viewController), а затем, когда вы нажимаете готово, второй ViewController отклоняет, и вы возвращаетесь на firstViewController.

Это код, который я использую :
(в secondViewController)

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
var destinationviewcontroller : ViewController = segue.destinationController as! ViewController
    destinationviewcontroller.LabelText = weblinklabel.stringValue
    }

Очевидноlabeltext, это метка в firstviewcontroller, которая показывает, что написано в тех textfields в secondViewController.

Проблема в том, когда я использую раскадровку и просто перетаскиваю кнопку «Готово» на firstViewController, он открывает firstViewController в новом окне с новыми данными/обновленными labeltext. Я хочу, чтобы secondViewController просто уволился, когда я нажимаю «готово», и обновленная метка появилась на firstViewController без ее открытия в новом окне.

Это немного трудно объяснить, поэтому, если вам нужны еще какие-то детали для разъяснения, я буду более чем счастлив дать его!

Заранее спасибо!

1 ответ

  1. Да, вы должны использовать Unwind сегменты, как указано здесь .

    Сначала добавьте пустой IBActionметод к вашему firstViewController(обратите внимание, что вы должны написать его напрямую):

    @IBAction func unwindToFirstViewController (sender: UIStoryboardSegue) {
    }
    

    После того, как написано, Теперь в вашей раскадровке вы можете Control+dragсвою Doneкнопку к Exitпункту в ВашемsecondViewController, как это:

    Введите описание изображения здесь

    Он должен поп ваш новый IBActionметод, который будет обрабатывать размотки, теперь просто реализовать его:

    @IBAction func unwindToFirstViewController (sender: UIStoryboardSegue) {
        if let sourceViewController = sender.source as? SecondViewController {
            // update whatever values you want
            // to update in firstViewController from secondViewController
        }
    }