Swift:点击手势无法识别
Posted
技术标签:
【中文标题】Swift:点击手势无法识别【英文标题】:Swift: tap Gesture not recognized 【发布时间】:2016-07-25 23:56:32 【问题描述】:当我的代码被分成类时,我无法让我的点击手势工作。我之前将所有这些都包含在一个文件中,并且运行顺利,所以我认为我在以下代码中做错了:
placeContainerView.userInteractionEnabled = true
let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: Selector(self.showFullPlaceContainerViewFunction(placeContainerView)))
placeContainerView.addGestureRecognizer(showFullPlaceContainerView)
函数showFullContainerViewFunction(placeContainerView)
在哪里
func showFullPlaceContainerViewFunction(placeContainerView: PlaceContainerView)
placeContainerView.animateExpandContractContainer()
和
func animateExpandContractContainer()
print("Tap gesture working")
if self.displayingPlaceLabel == false
print(self.displayingPlaceLabel)
self.displayingPlaceLabel = true
UIView.animateWithDuration(0.4, delay: 0.0, options: [], animations:
self.center.x += 180
, completion: nil)
else
self.displayingPlaceLabel = false
UIView.animateWithDuration(0.4, delay: 0.0, options: [], animations:
self.center.x -= 180
, completion: nil)
placeContainerView 不知何故无法识别点击,并且在单击时不返回任何打印语句。
有什么想法吗?感谢您的帮助!
【问题讨论】:
我不确定如何,但选择器#selector(className.methodName)
不应该有任何参数。所以***.com/questions/32085396/…有问题
我认为你的选择器是错误的。它应该是 '#selector(Classname.showFullPlaceContainerViewFunction(_:))' 而不是 'Selector(self.showFullPlaceContainerViewFunction(placeContainerView))'
@RJE 正如你所说,我已经替换了它并且代码没有给出任何错误,但是当我运行它并尝试点击“placeContainerView”时,我在调用 animateExpandContractContainer 时收到错误 - 线程1:EXC_BAD_ACCESS
@impression7vx 你是对的。我更改了选择器以匹配 RJE 所写的内容,以便通过 placeContainerView
mm,我刚刚注意到方法参数不是 UIGestureRecognizer。点击手势将通过 UITapGestureRecogninser(我们无法更改此行为)。您必须使用识别器找到您的“PlaceContainerView”或保留全局参考。例如。 'func showFullPlaceContainerViewFunction(recognizer: UITapGestureRecognizer)'
【参考方案1】:
按照您的建议更改选择器语法
let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: #selector(self.showFullPlaceContainerViewFunction(_:)))
placeContainerView.addGestureRecognizer(showFullPlaceContainerView)
你的方法会是这样的
func showFullPlaceContainerViewFunction(recognizer: UITapGestureRecognizer)
let placeContainerView = recognizer.view as! PlaceContainerView
placeContainerView.animateExpandContractContainer()
【讨论】:
我不得不使用 RJE 对选择器的建议,但这很有效。 欢迎小伙伴快乐编码:) 谢谢你!你能解释一下我如何将识别器转换为不同的类吗?这个想法从未在我脑海中闪过。 UITapGestureRecognizer 是否只抓取被点击的任何对象?recognizer.view
会给你添加gesture
的视图对象,希望你现在得到它。【参考方案2】:
查看 placeContainerView 及其父视图框架和 userInteractionEnable。
【讨论】:
【参考方案3】:期望函数的参数在哪里?
placeContainerView.userInteractionEnabled = true
let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: #selector(YourViewController.yourFunction(_:))
placeContainerView.addGestureRecognizer(showFullPlaceContainerView)
你预期的功能应该是这样的:
func yourFunction(tapGestureRecognizer:UITapGestureRecognizer)
// Do something
【讨论】:
以上是关于Swift:点击手势无法识别的主要内容,如果未能解决你的问题,请参考以下文章
使用点击手势识别器时,IOS swift应用程序无法正常工作
Swift - 如何将点击手势添加到 UIViews 数组?