【发布时间】: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