Использование селекторов в контроллере вида с доступными для objc функциями, расположенными в родительском контроллере вида - PullRequest
1 голос
/ 06 ноября 2019

Я создаю контроллер представления страницы, в котором я хотел бы создать две открытые функции objc, которые существуют в PageViewController:

@objc func nextPage() {
  // navigates to next view controller
}

@objec func previousPage() {
  // navigates to previous view controller
}

Из одного из контроллеров представления, отображаемых PageViewController, PageOneViewController, я хотел бычтобы использовать эту функцию с селектором в действии:

var pageViewController: PageViewController? {
    guard let parent = self.parent as? PageViewController else {
        return nil
    }
    return parent
}

button.addTarget(self, action: #selector(self.pageViewController?.nextPage), for: .touchUpInside)

Однако, когда я делаю это, я получаю ошибку: '-[MyProject.PageOneViewController nextPage:]: unrecognized selector sent to instance 0x....

Работают ли селекторы только в одном классе? Разве вы не можете использовать селекторные функции таким образом? В основном я не хотел писать функцию nextPage во всех моих контроллерах представления, которые отображает PageViewController.

1 Ответ

1 голос
/ 06 ноября 2019

target, указанный в addTarget, - это класс, который должен содержать action, который будет вызываться.

Изменение:

button.addTarget(self, action: #selector(self.pageViewController?.nextPage), for: .touchUpInside)

на:

button.addTarget(self.pageViewController, action: #selector(PageViewController.nextPage), for: .touchUpInside)

Обратите внимание, что теперь целью является self.pageViewController, а действием является метод nextPage класса PageViewController.

...