在具有位于父视图控制器中的 objc 公开函数的视图控制器中使用选择器

Using Selectors in a View Controller with objc exposed functions located in the Parent View Controller

我正在创建一个页面视图控制器,我想在其中创建两个存在于 PageViewController 中的 objc 公开函数:

@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....

选择器是否只能在同一个 class 中工作?你不能这样使用选择器功能吗?我主要不想在 PageViewController 显示的所有视图控制器中编写 nextPage 函数。

你在addTarget中指定的target是class,必须包含将被调用的action

变化:

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

至:

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

请注意,现在目标是 self.pageViewController,操作是 PageViewController class 的 nextPage 方法。