【问题标题】:Ios swift replace selector by functionios swift按功能替换选择器
【发布时间】:2016-10-29 22:56:41
【问题描述】:

我只想在按钮点击时写一两行代码

print("Button Clicked")

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

action: #selector(BtnKlkFnc(_:))

我想简化一下

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

我也试过

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

谁能帮我简化一下

我是stackoverflow的新手,还没有足够的声誉,所以请为我的问题投票,这样我就可以投票给你的答案

【问题讨论】:

标签: ios uibutton swift2 action selector


【解决方案1】:

简短回答:你不能那样做。按钮动作是 Cocoa/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")
    }
}

【讨论】:

  • 感谢您的解决方案。我是stackoverflow的新手,还没有足够的声誉,所以请投票支持我的问题,这样我就可以投票给你的答案
  • @SujayUN,我用自定义版本的 UIButton 更新了我的答案,它可以满足您的需求。
猜你喜欢
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2021-12-05
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多