Передача данных между ViewController в swift4 - PullRequest
0 голосов
/ 13 января 2019

enter image description here

На этой картинке выше. Два вида. Верхняя часть - это представление для отображения даты (для этого представления имя класса представление календаря ). А нижний - это табличное представление. Текущее имя представления Главное представление Когда я нажимаю на ячейку табличного представления, оно переходит к следующему представлению 1009 *. Когда я отказываюсь от следующего представления , я хочу передать некоторые данные в представление календаря . Как этого добиться.

class MainView: UIViewController, UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let next = self.storyboard?.instantiateViewController(withIdentifier: "NextVC") as! NextVC
        self.present(next, animated: true, completion: nil)

    }

}


class NextVC: UIViewController {

    var sendingData: String?

    @IBAction func backAction(_ sender: Any) {
        dismiss(animated: true, completion: nil)

    }
}


class CalenderView: UIViewController{

    var receiveValue: String?
}

Здесь я хочу, чтобы при отклонении nextview значение sendData перейдет в представление календаря .

Как это сделать? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 13 января 2019

Я могу дать вам два решения:

  1. Вы можете создать свое собственное уведомление.

Прежде всего при ответном действии вы должны опубликовать уведомление с sendData .

NotificationCenter.default.post(name: NSNotification.Name(rawValue: UpdateCalendarNotification), object: sendingData)

Далее на главном контроллере представления с представлением календаря необходимо зарегистрировать уведомление для имени «UpdateCalendarNotification».

    func registerNotifications() {
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(updateCalendarView(_:)),
                                               name: NSNotification.Name(rawValue: "UpdateCalendarNotification"),
                                               object: nil)
    }

А на селекторе updateCalendarView(_:) вы должны обработать изменения для календаря.

    @objc
    func updateCalendarView(_ notification: NSNotification) {
        if let sendingData = notification.object as? String {
            /// Update calendar view
        }
    }
  1. Вторым решением является публичный блок для вас "следующий контроллер".

На следующем контроллере представления вы должны добавить этот обработчик:

    var onDismiss: ((String?) -> Void)?

и в методе backAction вы должны передать свои данные

    onDismiss?(sendingData)

В вашем главном контроллере представления вы должны реализовать этот блок следующим образом:

let next = self.storyboard?.instantiateViewController(withIdentifier: "NextVC") as! NextVC
next.onDismiss = { [weak self] (sendingData) in
    self?.calendarView.receiveValue = sendingData
}
self.present(next, animated: true, completion: nil)

Надеюсь, это вам поможет)

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