У меня есть класс, который я хочу получить из пользовательского подкласса UIPageViewController
. Для этой цели я определил протокол, как обычно в классе я хочу получить информацию:Второй делегат в классе возможно в Swift?
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
здесь, потому что уже есть делегат UIPageViewControllerDelegate
и если я использую delegate
я получаю сообщение об ошибке
«не может overide свойства с типом UIPageViewControllerDelegate»
Однако, когда я запускаю приложение и просматриваю страницы, функция getIndex
не вызывается.
Я не уверен, что у вас может быть только 2 делегата в одном классе. Я не вижу другого способа запуска функции getIndex
при каждом прокрутке страницы и изменении индекса.
Вы можете создать два различных делегатов и использовать его, вы не можете использовать ни одного делегата в двух разных местах. – iphonic
вот что я сделал. но функция getIndex не вызывается. – DuckMan
Да, проблема в том, что 'delegate2' был' nil'. Не связанный, я бы предложил более значимое имя, чем 'delegate2'. Возможно, 'indexDelegate' или что-то в этом роде. – Rob