委托返回不正确的ViewController实例数

时间:2017-01-15 06:17:24

标签: ios swift uiviewcontroller delegates uipageviewcontroller

我有一个ViewController" LandingPageViewController"它有一个嵌入式的PageViewController" pageViewController"。

我创建了一个委托函数来从" pageViewController"到LandingPageViewControlelr"。这工作正常,数据被发送到" LandingPageController"但是我无法与其任何元素进行交互,因为委托正在创建一个新实例。

enter image description here

当应用程序首次启动时,它会转到" LandingPageViewController"如果我在viewDidLoad和viewDidAppear中打印(self),结果就是这样:

Delegate viewDidLoad...<ParseStarterProject_Swift.LandingPageViewController: 0x7fbf29406e60>
Delegate viewDidAppear...<ParseStarterProject_Swift.LandingPageViewController: 0x7fbf29406e60>

然后,当我滚动到第3页并调用代表后,我得到以下打印结果(自我)

Delegate function...<ParseStarterProject_Swift.LandingPageViewController: 0x7fbf2940e3a0>

enter image description here

这是来自我的&#34; LandingPageViewController&#34;的代码。正在接收数据:

protocol GetMyIndexDelegate {
    func getIndex(index: Int)
}

class LandingPageViewController: UIViewController, GetMyIndexDelegate {
 @IBOutlet var createAccountButton: UIButton!

 //delegate functionto get index
func getIndex(index: Int) {
    if index == 3 {
        print("Delegate function...\(self)")

        //print(createAccountButton)

    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    print("Delegate viewDidLoad...\(self)")
}
}

这是来自&#34; pageViewController&#34;的代码。类:

class pageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

let myHeight = 667
let myCenter = 333.5

// define the delegate for use
var indexDelegate: 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)

            if index == 3 {

                // this is the line causing problem
                self.indexDelegate = LandingPageViewController()

                print("PageView Index Defined As...\(self.indexDelegate)")
                indexDelegate?.getIndex(index: index!)

                //goToVC()

            }
        }
    }
}

我相信这是问题所在:

self.indexDelegate = LandingPageViewController()

它定义了不正确的实例?????

作为一个侧面线索,我有另一个委托方法在另一个方向,从viewController到&#34; pageViewController&#34;的第一页。问题是我必须使用以下代码在UIPageViewController中正确定义页面的索引:

self.delegate = self.childViewControllers[0] as! pageViewController

我不确定这在上面的问题中是如何工作的,因为LandingPageViewController是父项? pageViewController?

1 个答案:

答案 0 :(得分:0)

self.indexDelegate = LandingPageViewController()不正确,因为您是以编程方式实例化新的视图控制器,而不是引用故事板已为您实例化的视图控制器。

您有一个嵌入segue,用于将页面视图控制器嵌入到另一个视图控制器的场景中。因此,您可以在父视图控制器中使用prepareForSegue来设置子视图控制器中所需的任何属性。

但是,如果您只是在父母中寻找对子视图控制器的引用,那么它是childViewControllers.firstchildViewControllers[0]。如果孩子正在寻找对其父视图控制器的引用,那么它只是parent(或者在您的情况下,parent as? GetMyIndexDelegate)。