swift2 Ios快速替换选择器按功能

ubbxdtey  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(193)

我只想写一两行关于按钮点击的代码,就像

print("Button Clicked")

为此,我不想创建一个单独的函数,并通过选择器调用

action: #selector(BtnKlkFnc(_:))

我想简化为

action: { action in print("Button Clicked")}

我也试过


# selector({print("Button Clicked")})

有人能帮我简化一下吗
我是新的stackoverflow和没有足够的声誉还没有,所以请投票给我的问题了,所以我可以投票给你的ans

zzlelutf

zzlelutf1#

简短回答:你不能这么做。按钮动作是可可/Cocoa touch内置的目标/动作机制的一部分。它基于选择器,你必须创建一个命名的方法并使用它的选择器。你不能使用Swift闭包作为按钮动作。

编辑:

请注意,可以创建一个UIButton的自定义子类,该子类具有一个闭包属性,并在点击按钮时调用该闭包。您要做的是使按钮的init方法将其自身设置为touchUpInside事件的目标,并调用按钮的一个方法,该方法反过来调用您的闭包(在确保闭包属性不为空之后)。

编辑#2:

请注意,创建一个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
        }
    }
}

在视图控制器中:

override func viewDidLoad() {
    super.viewDidLoad()
    button.buttonClosure = { _ in
        print("You tapped the button")
    }
}

相关问题