需要在 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
设置为 viewController
的 navigationController
,我之前已经仔细向下转换为它的类型。
方法handleGesture
已经在自己的NavigationControllerclass中正确声明并设置为public,实际上在ProfileNavigationController
class中我已经设置了并宣布 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))
有一个 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
设置为 viewController
的 navigationController
,我之前已经仔细向下转换为它的类型。
方法handleGesture
已经在自己的NavigationControllerclass中正确声明并设置为public,实际上在ProfileNavigationController
class中我已经设置了并宣布 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))