【发布时间】:2017-01-14 23:59:55
【问题描述】:
我通过委托方法向视图控制器发送数据。在接收数据的视图控制器中,如果我在print(self) viewDidLoad 中得到这个值:
<PageViewControllerImage: 0x7fba16d0dc40>
如果我在委托函数中print(self) 我得到这个值:
<PageViewControllerImage: 0x7fba16e0eab0>
我相信这就是我定义委托的方式,它正在创建PageViewControllerImage 的新实例,但我不知道如何获取对它的现有引用?
这是我用来在发送数据的类中设置委托的方法:
self.indexDelegate = PageViewControllerImage()
-------- 编辑 --------
我正在尝试从我的 PageViewController 类发送数据:
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 {
// call the delegate function in delegate class
indexDelegate?.getIndex(index: index!)
}
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
// just been trying to define instance first
let storyboard: UIStoryboard = UIStoryboard (name: "Main", bundle: nil)
let PageViewControllerImageInstance: PageViewControllerImage = storyboard.instantiateViewController(withIdentifier: "vc4") as! PageViewControllerImage
print("Defined Instance \(PageViewControllerImageInstance)")
self.indexDelegate = PageViewControllerImageInstance
然后在PageViewControllerImage类里面接收数据:
protocol GetMyIndexDelegate {
func getIndex(index: Int)
}
import UIKit
class PageViewControllerImage: UIViewController, GetMyIndexDelegate {
//delegate functionto get index
func getIndex(index: Int) {
if index == 3 {
print("Inside delegate: \(self)")
}
}
@IBOutlet var signupImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad: \(self)")
// Do any additional setup after loading the view.
}
即使在设置委托之前定义了 viewController 的实例,它仍然返回不同的实例编号:
Defined Instance <ParseStarterProject_Swift.PageViewControllerImage: 0x7fb365f06260>
viewDidLoad: <ParseStarterProject_Swift.PageViewControllerImage: 0x7fb365d0c940>
Inside delegate: <ParseStarterProject_Swift.PageViewControllerImage: 0x7fb365f06260>
【问题讨论】:
-
您只是将代理设置为
PageViewControllerImage的新实例,但您应该设置为现有实例。你在哪里设置代表?PageViewControllerImage和作为代理的视图控制器是什么关系? -
我在 viewDidLoad 中设置引用。 PageViewControllerImage 是一个 VC,它是 PageViewController 的一部分(索引 3)
-
viewDidLoadofPageViewControllerImage?也许您可以在您的问题中添加对您要完成的工作的更大愿景。您正在尝试将数据从哪里传递到哪里? -
对不起,我已经编辑了我的问题以显示更多内容。
-
您的
UIPageViewController子类是否实现UIPageViewControllerDataSource?