有没有办法在 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
,可以通过UIBarButtonItem
的tag
属性传递参数。
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