необходимо дважды установить целевой метод в viewcontroller и navigationcontroller — swift — программно

#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))