【发布时间】:2017-05-30 05:30:02
【问题描述】:
我有一个 ViewController “LandingPageViewController”,它有一个嵌入式 PageViewController “pageViewController”。
我创建了一个委托函数来从“pageViewController”写入 LandingPageViewControlelr”。这工作正常,数据被发送到“LandingPageController”但是我无法与其任何元素交互,因为委托正在创建一个新实例。
当应用首次启动时,它会转到“LandingPageViewController”,如果我在 viewDidLoad 和 viewDidAppear 中打印(self),结果如下:
Delegate viewDidLoad...<ParseStarterProject_Swift.LandingPageViewController: 0x7fbf29406e60>
Delegate viewDidAppear...<ParseStarterProject_Swift.LandingPageViewController: 0x7fbf29406e60>
然后,一旦我滚动到第 3 页并调用了委托,我就会得到以下 print(self) 的结果
Delegate function...<ParseStarterProject_Swift.LandingPageViewController: 0x7fbf2940e3a0>
这是接收数据的“LandingPageViewController”中的代码:
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)")
}
}
这是来自“pageViewController”类的代码:
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 到“pageViewController”的第一页,问题是我必须在 UIPageViewController 中正确定义页面的索引使用以下代码:
self.delegate = self.childViewControllers[0] as! pageViewController
我不确定在上述问题中这将如何工作,因为 LandingPageViewController 是父级? pageViewController 的?
【问题讨论】:
-
无关,但作为编程风格的问题,我建议将
pageViewController类重命名为PageViewController(或以大写字母开头的名称)。类和类型应始终以大写字母开头。这不是必需的,但它是一个让您的代码更具可读性的约定问题... -
困扰了我一段时间的,它在列表中
标签: ios swift uiviewcontroller delegates uipageviewcontroller