有没有办法在 Swift 中使用#selector 调用带参数的函数

Posted

技术标签:

【中文标题】有没有办法在 Swift 中使用#selector 调用带参数的函数【英文标题】:Is there a way to call a function with parameters using #selector in Swift 【发布时间】:2016-09-08 22:04:17 【问题描述】:

我有一组 UIToolbar 项目,显示 inputField 何时成为第一响应者。

//... code
toolBar.items = [
            UIBarButtonItem(title: "Button 1", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(myFunction))]

myInputField.inputAccessoryView = toolBar

是否可以从上面的示例中使用参数调用myFunction

类似...

... #selector(myFunction(someParameter)))

【问题讨论】:

【参考方案1】:

类似于UIButton,可以通过UIBarButtonItemtag属性传递参数。

override func viewDidLoad() 
    super.viewDidLoad()

    let toolBar = UIToolbar()
    let firstButton = UIBarButtonItem(title: "Button 1", style: UIBarButtonItemStyle.Done, target: self, action: #selector(myFunction))
    let secondButton = UIBarButtonItem(title: "Button 2", style: UIBarButtonItemStyle.Done, target: self, action: #selector(myFunction))
    firstButton.tag = 1
    secondButton.tag = 2
    toolBar.items = [ firstButton, secondButton ]
    toolBar.sizeToFit()
    textField.inputAccessoryView = toolBar


func myFunction(sender: UIBarButtonItem) 
    print("Tapped: \(sender.tag)")

在此示例中,点击按钮会打印按钮的标签:

Tapped: 1   // Tap button 1
Tapped: 2   // Tap button 2

【讨论】:

非常感谢您的帮助。

以上是关于有没有办法在 Swift 中使用#selector 调用带参数的函数的主要内容,如果未能解决你的问题,请参考以下文章

Swift:class 没有实现 methodSignatureForSelector: -- 前面的麻烦 Unrecognized selector

Swift新手教程系列5-函数+selector在swift中的使用方法

使用 swift 的核心数据错误:[SimpleRunner.Run setTime:]: unrecognized selector sent to instance

Swift 中的外观代理/UI_APPEARANCE_SELECTOR?

swift 使用Selector swift传递值

如何使用 Swift #selector 语法解决“歧义使用”编译错误?