【问题标题】:Pass Data from Container VC to Child VC in XLPagerTabStrip将数据从容器 VC 传递到 XLPagerTabStrip 中的子 VC
【发布时间】:2019-08-26 00:45:51
【问题描述】:

我正在使用第三方库 XLPagerTabStrip。我有一个容器 VC 和三个子 VC。现在我有一个按钮,可以在我的 Container VC 中点击显示日历。我希望当我点击任何日期时,它应该将该日期传递给我的子 VC,然后我将根据提供的日期点击一个 API。我在我的容器 VC 中制定了一个协议,并将日期传递给它的函数,并在我的子 VC 中的扩展中调用该委托,但它没有捕获我的委托。这是我的 Container VC 类的代码,

protocol BookingContainerDelegate {

func selectedDate(selectedDate:String)
}

在这里,我将 selectedDate 传递给 My CContainer 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()
    }
}

现在在我的 Child VC 中,这就是我调用委托并将数据从委托传递给我的变量的方式,

extension AcceptedBookingVC : BookingContainerDelegate

{

func selectedDate(selectedDate: String) {

    date = selectedDate
}
}

但是当视图被加载时,它并没有捕捉到我的委托。我如何在 XLPagerTabStrip 的 Child VC 中传递这个日期。 这就是我在 Container VC 中调用 Child 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]
}

【问题讨论】:

  • 您是否将课程设置为委托人?
  • 你能告诉编码器你在ContainerVC中添加AcceptedBookingVC的位置吗?
  • 我已经编辑了代码,请检查。 @卡姆兰
  • 不,我还没有设置,我想知道如何在 Child VC 中设置它,因为我的 Child VC 我没有通过任何名称或 segue 加载,它通过 XLPager Tab Strip 方法加载到 Container VC . @PaFi
  • 你必须设置委托child1.delegate = self。没有足够的代码来理解父子视图控制器的设置是如何完成的。但是,您必须获取对 AcceptedBookingVC 控制器的引用并设置其委托以获取更改。

标签: swift delegates xlpagertabstrip


【解决方案1】:

在您的父 VC 中检测您当前活动的子 VC 并将委托分配给子 VC

self.dateDelegate = childVC

【讨论】:

  • 在我的父类子 VC 在 XLPagerTabStrip 委托中检测一次,覆盖 func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] { let child1 = UIStoryboard().loadAcceptedBookingVC() self.dateDelegate = AcceptedBookingVC() child1.itemInfo = "Accepted" let child2 = UIStoryboard().loadPendingBookingVC() child2.itemInfo = "Pending" let child3 = UIStoryboard().loadHistoryBookingVC() child3.itemInfo = "History" return [child1,child2,孩子3] } . @Ajay saini
  • 我提到过这样的,但它没有在 AcceptedVC 中捕获委托,让 child1 = UIStoryboard().loadAcceptedBookingVC() self.dateDelegate = AcceptedBookingVC.self 作为? BookingContainerDelegate child1.itemInfo = "已接受"
  • 您正在做的是,您正在实例化一个不正确的新子视图控制器。
  • 你希望这个委托只在一个 VC 中?
  • 我想将日期从 Parent VC 传递给 Child VC 。 @Ajay saini
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多