在 Swift 中获取 UITapGestureRecognizer 的发件人
Posted
技术标签:
【中文标题】在 Swift 中获取 UITapGestureRecognizer 的发件人【英文标题】:Getting UITapGestureRecognizer's sender in Swift 【发布时间】:2014-07-20 00:18:26 【问题描述】:所以我正在开发一个选择器,提醒用户平移对象而不是点击它。 以下代码为动画:
func labelTapped(sender:UITapGestureRecognizer)->Void
UIView.animateWithDuration(0.2, delay: 0, options: UIViewAnimationOptions.CurveEaseIn, animations:
sender.view.frame = CGRectMake(sender.view.frame.origin.x + 15, sender.view.frame.origin.y, sender.view.frame.width, sender.view.frame.height)
, completion:
(value:Bool) in
UIView.animateWithDuration(0.2, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations:
sender.view.frame = CGRectMake(sender.view.frame.origin.x - 15, sender.view.frame.origin.y, sender.view.frame.width, sender.view.frame.height)
, completion:
(value:Bool) in
)
)
现在回到对象本身。我正在分配一个 UITapGestureRecognizer
并将其添加到对象中,但我不太确定它是如何工作的,因为在 Objective-C 中,我们曾经这样做过:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(labelTapped)];
不需要参数。但是在 Swift 中,我必须在 labelTapped
之后的括号中输入一个参数,因为它会给我一个 Missing argument for parameter #1 in call
错误:
let labelTap1=UITapGestureRecognizer(target: self, action: labelTapped())
我应该如何解决这个问题?谢谢!
【问题讨论】:
【参考方案1】:动作选择器是一个以冒号结尾的字符串,它告诉它有一个参数(发送者):
let labelTap1=UITapGestureRecognizer(target: self, action: "labelTapped:")
【讨论】:
【参考方案2】: override func viewDidAppear(animated: Bool)
super.viewDidAppear(animated)
let tapRecognizer = UITapGestureRecognizer(target: self, action: "handleSingleTap:")
tapRecognizer.numberOfTapsRequired = 1
self.view.addGestureRecognizer(tapRecognizer)
func handleSingleTap(recognizer: UITapGestureRecognizer)
self.view.endEditing(true)
【讨论】:
以上是关于在 Swift 中获取 UITapGestureRecognizer 的发件人的主要内容,如果未能解决你的问题,请参考以下文章