我有一个类,我想从 UIPageViewController
的自定义子类接收数据。为此,我在我想要接收信息的类中正常定义了一个协议(protocol):
protocol GetMyIndexDelegate: class {
func getIndex()
}
class LandingPageViewController: UIViewController, GetMyIndexDelegate {
func getIndex() {
print("IT GOT CALLED")
}}
然后在发送信息的类中:
class pageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
weak var delegate2: GetMyIndexDelegate?
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if (completed && finished) {
if let currentVC = pageViewController.viewControllers?.last {
let index = vcArr.index(of: currentVC)
delegate2?.getIndex()
}
}
}
我必须在这里使用delegate2
,因为已经有一个委托(delegate)UIPageViewControllerDelegate
,如果我使用delegate
,我会得到一个错误
'cannot overide property with type UIPageViewControllerDelegate'
但是,当我运行应用程序并滚动页面时,不会调用函数 getIndex
。
我不确定同一个类(class)是否可以有 2 名委托(delegate)。我看不到每次滚动页面并且索引发生变化时运行 getIndex
函数的另一种方法。
最佳答案
我怀疑 delegate2
在您尝试调用 getIndex
的行处为零。由于 delegate2
是一个 weak
属性,因此它不会使对象保持事件状态。如果您没有对该对象的其他强引用,那么它将被释放并将 delegate2
属性设置为 nil。
关于ios - Swift 中可能存在类中的第二个委托(delegate)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41646820/