ios - Swift 中可能存在类中的第二个委托(delegate)吗?

标签 ios swift delegates protocols uipageviewcontroller

我有一个类,我想从 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/

相关文章:

iphone - 我应该在哪里放置委托(delegate)方法以及如何调用它们?

c# - 使用异步委托(delegate)进行异常处理

ios - 替换 GKTurnBasedMatch 参与者属性中的玩家

swift - block 没有真正执行?

iphone - 在 Swift 中使用分页将 subview 添加到 UIScrollview

ios - 使用 CoreData 中的图像高效填充 TableView | swift

c# - 如何更改 backgroundworker 中的 ListView?跨线程错误

ios - NSLocationAlwaysAndWhenInUseUsageDescription 的字符限制是多少?

objective-c - 用于呈现多个模态的 NSNotificationCenter?

ios - 如何在IOS SDK中显示图像的加载进度栏