刚刚花了一天时间撞击键盘,我想我会分享我的诊断和解决方案。
情况:您将自定义视图的自定义类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)
的类。如果您要在ViewController
中构建识别器和卡片,那将是self
。如果您想将discardedCard
移到自定义View类中(例如),请在我的示例中将self
替换为CardView
,包括代理行。
测试上面的代码,我发现从未调用abandonedCard函数。发生了什么事?
答案 0 :(得分:1)
所以一天之后,这就是我必须解决的问题。我希望这份清单对其他人有用。我是iOS的新手(来自Android),所以对于你的退伍军人来说可能是显而易见的:
cv
)具有userInteractionEnabled=true
。请注意,如果您使用自己的构造函数,则默认设置为 false userInteractionEnabled=true
delegate
声明和addGestureRecognizer
声明的顺序有所不同;我没有发现使用Xcode 7.2和iOS 9.2 myCards
容器,该容器没有正确设置宽度并且正在切断最右边的卡(并且由于默认情况下禁用了剪切,因此这不是视觉上的直到我查看View层次结构中的调试器