Передача данных из контейнера VC в дочерний VC в XLPagerTabStrip

#swift #delegates #xlpagertabstrip

#swift #делегирует #xlpagertabstrip

Вопрос:

я использую стороннюю библиотеку XLPagerTabStrip. У меня есть контейнер VC и три дочерних VC. Теперь у меня есть кнопка, которая отображает календарь при нажатии в моем контейнере VC. Я хочу, чтобы при нажатии на любую дату она передавала эту дату в мой дочерний VC, и там я подключу API на основе предоставленной даты. Я создал протокол в моем контейнере VC и передаю date его функции и вызываю этот делегат в моем дочернем VC в расширении, но он не улавливает мой делегат. Вот код для моего класса контейнера VC,

 protocol BookingContainerDelegate {

func selectedDate(selectedDate:String)
}
  

Здесь я передаю selectedDate для делегирования функции в моем контейнере VC,

 func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {

    let selected = calendar.selectedDate

    let dateFormatter1: DateFormatter = DateFormatter()
    dateFormatter1.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
    dateFormatter1.dateFormat = "yyyy-MM-dd"
    print("(dateFormatter1.string(from: selected!))")

    dateDelegate?.selectedDate(selectedDate: dateFormatter1.string(from: selected!))

    self.popViewTopConstraint.constant = -300
    popUpShowing = false

    UIView.animate(withDuration: 0.3) {
        self.view.layoutIfNeeded()
    }
}
  

Теперь в моем дочернем VC я вызываю delegate и передаю данные из delegate в мою переменную,

 extension AcceptedBookingVC : BookingContainerDelegate
  

{

 func selectedDate(selectedDate: String) {

    date = selectedDate
}
}
  

Но он не улавливает мой делегат, когда представление было загружено. Как я могу передать эту дату в моем дочернем VC в XLPagerTabStrip.
Так я вызываю дочерний VC в контейнере VC,

  override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
    let child1 = UIStoryboard().loadAcceptedBookingVC()
    child1.itemInfo = "Accepted"

    let child2 = UIStoryboard().loadPendingBookingVC()
    child2.itemInfo = "Pending"

    let child3 = UIStoryboard().loadHistoryBookingVC()
    child3.itemInfo = " History"

    return [child1,child2,child3]
}
  

Комментарии:

1. вы присвоили классу значение делегата?

2. Можете ли вы показать coder, где вы добавили AcceptedBookingVC в ContainerVC ?

3. я отредактировал код, пожалуйста, проверьте. @Kamran

4. нет, я не устанавливал, я хочу знать, как установить это в дочернем VC, потому что мой дочерний VC загружается не через какое-либо имя или переход, он загружается в контейнер VC через метод XLPager Tab Strip. @PaFi

5. Вы должны установить делегирование child1.delegate = self . Недостаточно кода, о котором идет речь, чтобы понять, как выполняется настройка родительско-дочернего ViewController. Однако вы должны захватить ссылку на свой AcceptedBookingVC контроллер и настроить его делегат для получения изменений.

Ответ №1:

в вашем родительском VC определите ваш текущий активный дочерний VC и назначьте делегата дочернему VC

 self.dateDelegate = childVC
  

Комментарии:

1. В моем родительском классе дочерний VC обнаруживается один раз в делегате XLPagerTabStrip, переопределите функцию ViewControllers (для pagerTabStripController: PagerTabStripViewController) -> [UIViewController] { пусть child1 = UIStoryboard().loadAcceptedBookingVC() self.dateDelegate = AcceptedBookingVC() child1.ItemInfo = «Принято » пусть child2 = UIStoryboard().loadPendingBookingVC() child2.ItemInfo = «Ожидающий» пусть child3 = UIStoryboard().loadHistoryBookingVC() child3.ItemInfo = » История» возвращает [child1,child2,child3] } . @Ajay saini

2. У меня есть упоминание об этом, но оно не улавливает делегирование в AcceptedVC, пусть child1 = UIStoryboard().loadAcceptedBookingVC() self.dateDelegate = AcceptedBookingVC.self как? BookingContainerDelegate дочерний элемент1.ItemInfo = «Принято»

3. что вы делаете, так это создаете экземпляр нового дочернего контроллера представления, который неверен.

4. вы хотите это делегирование только в одном VC?

5. я хочу передать дату из родительского VC в дочерний VC. @Ajay saini