#swift #uiviewcontroller #uinavigationcontroller #uipangesturerecognizer #navigationcontroller
#swift #uiviewcontroller #uinavigationcontroller #uipangesturerecognizer #navigationcontroller
Вопрос:
Есть a NavigationController
, который имеет a 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
для этого жеста navigationController
viewController
значение, которое я ранее тщательно уменьшил до его типа.
Метод handleGesture
был правильно объявлен и установлен как общедоступный в своем собственном классе NavigationController, фактически в ProfileNavigationController
классе, который я установил и объявил общедоступным:
@objc public func handleGesture(_ gesture: UIPanGestureRecognizer){
Однако у меня есть эта ошибка Cannot find 'handleGesture' in scope
, ViewController
как если бы я тоже должен был объявить этот метод viewController
, даже если для цели установлено значение navigationController
.
Если я не установлю метод также в ViewController
(даже если он пустой), код не будет выполняться, и я не знаю, почему это так.
Если я установлю его пустым, viewController
все будет работать нормально. Как я могу это решить?
Ответ №1:
Вы должны использовать селектор ProfileNavigationController
like:
let panDown = UIPanGestureRecognizer(target: thisNavigationController, action: #selector(ProfileNavigationController.handleGesture))