为什么我的视图不响应使用 gestureRecognizer 的手势?
Why doesn't my View respond to a gesture using a gestureRecognizer?
刚花了一天的时间在键盘上敲打我的头,我想我会分享我的诊断和解决方案。
情况:您将自定义 class CardView
的自定义视图添加到应用中的封闭视图 myCards
中,并希望每张卡片响应点击手势(例如表明你想弃牌)。您开始的典型代码:
在你的ViewController中:
class MyVC : UIViewController, UIGestureRecognizerDelegate {
...
func discardedCard(sender: UITapGestureRecognizer) {
let cv : CardView = sender.view! as! CardView
...
}
在您的 myCards 构造中:
cv = CardView(card: card)
myCards.addSubview(cv)
cv.userInteractionEnabled = true
...
let cvTap = UITapGestureRecognizer(target: self, action: Selector("discardedCard:"))
cvTap.delegate = self
cv.addGestureRecognizer(cvTap)
我发现这里的论点非常混乱,文档也没有任何帮助。目前尚不清楚 target: argument
指的是实现 discardedCard(sender: UITapGestureRecognizer)
的 class 。如果您要在 ViewController
中构建识别器和卡片,那将是 self
。如果您想将 discardedCard
移动到自定义视图 class 中(例如),则在我的示例中将 self
替换为 CardView
,包括在委托行中。
测试上面的代码,我发现discardedCard函数并没有被调用。发生了什么事?
所以一天后,这就是我必须解决的问题。我希望这份清单对其他人有用。我是 iOS 的新手(来自 Android),所以对你们这些老手来说可能很明显:
- 确保触摸视图(示例中的
cv
)具有userInteractionEnabled=true
。请注意,如果您使用自己的构造函数,它将默认设置为 false
- 确保所有封闭视图也有
userInteractionEnabled=true
- 其他人发帖说
delegate
语句和 addGestureRecognizer
语句的顺序有所不同;我没有发现使用 Xcode 7.2 和 iOS 9.2
- 最重要的是:确保您触摸的视图完全在封闭视图的范围内。在我的例子中,我正在构建一个
myCards
容器,它没有正确设置宽度并且正在切断 right-most 卡片(并且由于默认情况下禁用剪裁,这在视觉上并不明显,直到我查看了视图层次结构中的调试器)
刚花了一天的时间在键盘上敲打我的头,我想我会分享我的诊断和解决方案。
情况:您将自定义 class CardView
的自定义视图添加到应用中的封闭视图 myCards
中,并希望每张卡片响应点击手势(例如表明你想弃牌)。您开始的典型代码:
在你的ViewController中:
class MyVC : UIViewController, UIGestureRecognizerDelegate {
...
func discardedCard(sender: UITapGestureRecognizer) {
let cv : CardView = sender.view! as! CardView
...
}
在您的 myCards 构造中:
cv = CardView(card: card)
myCards.addSubview(cv)
cv.userInteractionEnabled = true
...
let cvTap = UITapGestureRecognizer(target: self, action: Selector("discardedCard:"))
cvTap.delegate = self
cv.addGestureRecognizer(cvTap)
我发现这里的论点非常混乱,文档也没有任何帮助。目前尚不清楚 target: argument
指的是实现 discardedCard(sender: UITapGestureRecognizer)
的 class 。如果您要在 ViewController
中构建识别器和卡片,那将是 self
。如果您想将 discardedCard
移动到自定义视图 class 中(例如),则在我的示例中将 self
替换为 CardView
,包括在委托行中。
测试上面的代码,我发现discardedCard函数并没有被调用。发生了什么事?
所以一天后,这就是我必须解决的问题。我希望这份清单对其他人有用。我是 iOS 的新手(来自 Android),所以对你们这些老手来说可能很明显:
- 确保触摸视图(示例中的
cv
)具有userInteractionEnabled=true
。请注意,如果您使用自己的构造函数,它将默认设置为 false - 确保所有封闭视图也有
userInteractionEnabled=true
- 其他人发帖说
delegate
语句和addGestureRecognizer
语句的顺序有所不同;我没有发现使用 Xcode 7.2 和 iOS 9.2 - 最重要的是:确保您触摸的视图完全在封闭视图的范围内。在我的例子中,我正在构建一个
myCards
容器,它没有正确设置宽度并且正在切断 right-most 卡片(并且由于默认情况下禁用剪裁,这在视觉上并不明显,直到我查看了视图层次结构中的调试器)