我只是想知道是否可以将函数传递给按钮操作(通常是选择器)。
例如,通常我会说:
UIBarButtonItem(title: "Press", style: .Done, target: self, action: "functionToCall")
func functionToCall() {
// Do something
}
但我想知道是否可以做类似的事情:
UIBarButtonItem(title: "Press", style: .Done, target: self, action: {
// Do Something
})
我想这样做的原因是因为我的函数非常简单,而且看起来它会更整洁,更像 Swift 一样,因为他们强调闭包。
这是 Swift 3 的更新解决方案。
class BlockBarButtonItem: UIBarButtonItem {
private var actionHandler: (() -> Void)?
convenience init(title: String?, style: UIBarButtonItem.Style, actionHandler: (() -> Void)?) {
self.init(title: title, style: style, target: nil, action: #selector(barButtonItemPressed))
self.target = self
self.actionHandler = actionHandler
}
convenience init(image: UIImage?, style: UIBarButtonItem.Style, actionHandler: (() -> Void)?) {
self.init(image: image, style: style, target: nil, action: #selector(barButtonItemPressed))
self.target = self
self.actionHandler = actionHandler
}
@objc func barButtonItemPressed(sender: UIBarButtonItem) {
actionHandler?()
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)