需要在 viewcontroller 和导航控制器中设置目标方法两次 - swift - 以编程方式

need to set target method twice in viewcontroller and navigationcontroller - swift - programmatically

有一个 NavigationController 有一个 ViewController 作为一个 rootViewController

在这个 ViewController 中,我声明一个 panGestureRecogniser 这样的:

guard let thisNavigationController = navigationController as? ProfileNavigationController else { return }

let panDown = UIPanGestureRecognizer(target: thisNavigationController, action: #selector(handleGesture))
        panDown!.delegate = self
        collectionView.addGestureRecognizer(panDown!)

如您所见,我将此手势的 target 设置为 viewControllernavigationController,我之前已经仔细向下转换为它的类型。

方法handleGesture已经在自己的NavigationControllerclass中正确声明并设置为public,实际上在ProfileNavigationControllerclass中我已经设置了并宣布 public:

@objc public func handleGesture(_ gesture: UIPanGestureRecognizer){

但是我在 ViewController 中有这个错误 Cannot find 'handleGesture' in scope 好像我也应该在 viewController 中声明这个方法,即使目标设置为 navigationController

如果我不在 ViewController 中设置方法 also (即使它是空的)代码也不会 运行 而且我不不知道为什么。

如果我在 viewController 中将其设置为空,则一切正常。我该如何解决这个问题?

您应该使用 ProfileNavigationController 的选择器,例如:

let panDown = UIPanGestureRecognizer(target: thisNavigationController, action: #selector(ProfileNavigationController.handleGesture))