需要在 viewcontroller 和 navigationcontroller 中设置目标方法两次 - swift - 以编程方式

Posted

技术标签:

【中文标题】需要在 viewcontroller 和 navigationcontroller 中设置目标方法两次 - swift - 以编程方式【英文标题】:need to set target method twice in viewcontroller and navigationcontroller - swift - programmatically 【发布时间】:2020-11-29 13:50:22 【问题描述】:

有一个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已在其自己的NavigationController类中正确声明并设置为public,实际上在ProfileNavigationController类中我已设置并声明为public:

@objc public func handleGesture(_ gesture: UIPanGestureRecognizer)

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于需要在 viewcontroller 和 navigationcontroller 中设置目标方法两次 - swift - 以编程方式的主要内容,如果未能解决你的问题,请参考以下文章

强制 Revit 文件通过 Navis 转换

pytz库处理时区转换

django中navie time 和 aware time的使用和转换

《现代命令行工具指南》8. 备忘清单:让常用命令能够信手拈来 - navi

使用 SWRevealViewController 时如何登录注销

Navi.Soft30.框架.Mobile.开发手册