Suj*_*U N 4 action selector uibutton ios swift2
我只想在按钮点击上写一两行代码
print("Button Clicked")
Run Code Online (Sandbox Code Playgroud)
为此我不想创建一个单独的功能,并通过选择器调用
action: #selector(BtnKlkFnc(_:))
Run Code Online (Sandbox Code Playgroud)
我想简化一下
action: { action in print("Button Clicked")}
Run Code Online (Sandbox Code Playgroud)
我也试过了
#selector({print("Button Clicked")})
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我简化这一点
我是stackoverflow的新手,还没有足够的声誉,所以请投票支持我的问题,所以我可以投票给你的ans
简短回答:你做不到.Button动作是Cocoa/Cocoa touch内置的目标/动作机制的一部分.它基于选择器,您必须创建一个命名方法并使用它的选择器.您不能使用Swift闭包作为按钮操作.
请注意,可以创建具有闭包属性的UIButton的自定义子类,并在点击按钮时调用该闭包.你要做的是让按钮的init方法自己设置为touchUpInside事件的目标,并调用按钮的方法,然后调用你的闭包(在确保closure属性不是nil之后).
请注意,创建自定义子类非常简单,该子类UIButton
将自身设置为按下按钮的目标并保持闭包.
这是一个示例实现:
class ClosureButton: UIButton {
var buttonClosure: ((UIButton) -> Void)?
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.addTarget(self, action: #selector(handleTap(_:)), for: .touchUpInside)
}
@objc func handleTap(_ sender: UIButton) {
if let buttonClosure = buttonClosure {
buttonClosure(sender)
} else {
print("No button closure defined")
return
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的视图控制器中:
override func viewDidLoad() {
super.viewDidLoad()
button.buttonClosure = { _ in
print("You tapped the button")
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
703 次 |
最近记录: |