У меня есть ViewController «LandingPageViewController», который имеет встроенный PageViewController «pageViewController».Делегат, возвращающий неправильный экземпляр Number of ViewController
Я создал функцию делегата для записи из «pageViewController» в LandingPageViewControlelr ». Это прекрасно работает, и данные отправляются в« LandingPageController », однако я не могу взаимодействовать с каким-либо из его элементов, потому что делегат создает новый экземпляр .
Когда приложение запускает первый он идет в "LandingPageViewController" и если я печатаю (сам) в viewDidLoad и viewDidAppear это результат:
Delegate viewDidLoad...<ParseStarterProject_Swift.LandingPageViewController: 0x7fbf29406e60>
Delegate viewDidAppear...<ParseStarterProject_Swift.LandingPageViewController: 0x7fbf29406e60>
Затем, когда я прокрутил к 3-ю странице и делегат называется я получаю следующий результат печати (сам)
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 является родителем? страницыViewController?
Несвязанный, но как бы стиль программирования, я бы рекомендовал переименовать класс 'pageViewController' в' PageViewController' (или что-то, начинающееся с прописной буквы). Классы и типы всегда должны начинаться с буквы верхнего регистра. Это не требуется, но это вопрос соглашения, который делает ваш код более удобочитаемым ... – Rob
, который беспокоил меня какое-то время, его в списке – DuckMan