ViewDidAppear не вызывается автоматически - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть HomeViewController, который открывает WelcomeViewController с помощью segue и относится к типу Sheet.

В WelcomeViewController Пользователь вводит информацию, а затем закрывает (закрывает) ее. После закрытия WelcomeViewController я хочу обновить HomeViewController, изменив значение String на TextField.

Проблема в том, что ViewDidAppear в HomeViewController не вызывается после отклонения WelcomeViewController. У меня не было этой проблемы раньше при разработке для iOS.

Как я могу это исправить? Я попытался вызвать его вручную, но у меня возникли проблемы, потому что мой IBOutlets был установлен на ноль, и я не мог изменить текст в моем TextField.

Это код, который вызывает переход:

self.performSegue(withIdentifier: "welcome", sender: self)

это мои viewDidAppear в HomeViewController:

override func viewDidAppear() {
   super.viewDidAppear()
   if (CoreDataAccess().countUsers() == 0) {
       self.performSegue(withIdentifier: "welcome", sender: self)
   } else {
       //continue execution..
   }
}

В WelcomeViewController Я отклоняю ViewController, используя этот код

dismiss(self)

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Так я решил, используя delegate. Спасибо @ullstrm за предложение.

Сначала я добавил этот протокол к HomeViewController

protocol WelcomeDelegate {
    func insertData(_ name: String, birthday: Date)
}

Тогда это prepare(for segue:)

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    if let destinationViewController = segue.destinationController as? WelcomeViewController {
        destinationViewController.delegate = self
    }
}

И это расширение внизу (я знаю, что не совсем нормально вызывать viewDidAppear вручную, но пока работает)

extension HomeViewController : WelcomeDelegate {
    func insertData(_ name: String, birthday: Date) {
        viewDidAppear()
    }
}

Затем в WelcomeViewController я добавил эту переменную

var delegate:WelcomeDelegate? = nil

И эта строка прямо перед dismiss(self)

self.delegate?.insertData(tfName.stringValue, birthday: dpAge.dateValue)
0 голосов
/ 07 ноября 2018

Добавьте свой код в ViewWillAppear () вместо ViewDidAppear ().

или вы вызываете метод в HomeViewController при отклонении WelcomeViewcontroller

dismiss(animated: true) {
   self.presentedViewController.myMethod()
}
...