【问题标题】:Swift 4 using selector with Multiple Parameters [duplicate]Swift 4使用带有多个参数的选择器[重复]
【发布时间】:2018-05-02 01:11:20
【问题描述】:

我使用 Swift 4 编写并尝试编写一个将 categoryId 作为操作发送的函数,但我无法编写。我认为我的语法是错误的。如果我编写不带参数的函数,这不是问题,但参数函数会出错.你能告诉我如何使用选择器吗?

@objc func sendCategoryIdToPackageSelectionVC(categoryId : Int){
        MarketVC.categoryId = categoryId
        self.performSegue(withIdentifier: "sequeGoToPackageSelection", sender: nil)
    }

func addTapFeatures(){
        taplabel1 = UITapGestureRecognizer(target: self, action: #selector(self.sendCategoryIdToPackageSelectionVC(categoryId:2)))
        taplabel1?.cancelsTouchesInView = false
        self.labelFirst.addGestureRecognizer(taplabel1!)
}

我收到一条错误消息,提示操作选择器未引用任何 objc 方法。

【问题讨论】:

  • 检查this threadthis。 Swift 4 中关于 #selector 的使用没有什么新鲜事。
  • 这可能会有所帮助:stackoverflow.com/questions/19703767/…
  • func sendCategoryIdToPackageSelectionVC(categoryId : Int){ self.performSegue(withIdentifier: "sequeGoToPackageSelection", sender: nil) } @objc func callMethod(){ sendCategoryIdToPackageSelectionVC(categoryId: 2) } func addTapFeatures(){ taplabel1 = UITapGestureRecognizer(target: self, action: #selector(self.callMethod)) taplabel1?.cancelsTouchesInView = false }
  • 谢谢大家,我发现我的观点是错误的。我将再次使用相同的功能,但是这次我在 objc 功能中使用 sender : UILabel,然后我控制 sender.tag 哪个标签属于该标签。我根据该标签发送 categoryId 谢谢你的帮助。

标签: swift3 selector swift4


【解决方案1】:

我认为,你不能直接使用选择器来传递参数。 尝试这样的事情 您应该创建一个调用 handleTap(modelObj:myModelObj) 的 @objc 方法。

@objc func someMethod() { // name this properly!
    handleTap(modelObj: myModelObj)
}

然后你可以将它作为选择器传递:

#selector(someMethod)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2015-07-01
    相关资源
    最近更新 更多