在 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 的发件人的主要内容,如果未能解决你的问题,请参考以下文章

swift 在swift中获取内部函数指针

在 Swift 中获取设备方向

swift 在Swift中获取屏幕的宽度和高度

在 swift 4 中获取 json 有啥问题?

如何在 swift 3 中获取 systemLocaleCountryCode?

这个 CoreData 如何在 swift 3 中获取?