【问题标题】:Error in Swift when using UIImageView with selector @objc C function when reading sender.tag读取 sender.tag 时使用带有选择器 @objc C 函数的 UIImageView 时 Swift 出错
【发布时间】:2018-06-16 23:01:23
【问题描述】:

图像在按下时会向@objc C 函数发送一个动作:

 let imageView = UIImageView()
 imageView.tag = 3
 imageView.isUserInteractionEnabled = true
 imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(ItemAction)))
 imageView.image = UIImage(named: (itemDictionary[character.Equipment[imageView.tag]]!.image))
 overlayView.addSubview(imageView)

这是应该调用的函数:

@objc func ItemAction(sender: UIImageView!) {

    print(sender.tag)
    print("Item pressed from sender ")

}

该函数运行,但在打印发件人标签时,我收到一条错误消息并且程序退出:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UITapGestureRecognizer 标记]: 无法识别的选择器发送到实例 0x600002b42a00'

使用 UIButton 的整个设置都有效。 如何在外部函数中读取 UIImageView 的标签?

【问题讨论】:

  • 这个众所周知的错误意味着发件人是类UITapGestureRecognizer的对象,而不是UIImageView的对象。在父类UIGestureRecognizer方法的文档中隐含地说:“@IBAction func myActionMethod() @IBAction func myActionMethod(_ sender: UIGestureRecognizer)”developer.apple.com/documentation/uikit/uigesturerecognizer

标签: swift uiimageview tags


【解决方案1】:

给你

  @objc func itemAction(_ sender: UITapGestureRecognizer){
        if let tag = sender.view?.tag{
            print("ImageView tag \(tag)")
        }
    }

在您的函数中将您的方法签名更改为

@objc func ItemAction(_ sender: UITapGestureRecognizer)

【讨论】:

  • @NathanaelTse 很高兴它有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多