你能在 IBAction 按钮关闭之外改变它的状态吗? - Swift 4

Can you change state of an IBAction button outside of its closure? - Swift 4

这绝对不是禁用按钮的副本。我经历了几次都没有成功。事实上,我根本不记得在那里见过 sender.enabled。我在 Apple Developer's Forum 中找到了该代码。

您能否通过 sender 参数引用 IBAction 按钮并从代码中的其他位置更改其状态?在 IBAction 闭包中更改按钮的状态类似于: sender.enabled = falsesender.enabled = true 但是我正试图从另一个函数中更改它的状态。

我知道可以从不同的函数内部更改 IBOutlet 按钮的状态,如下所示:

@IBOutlet weak var myButton: UIButton!  
// then elsewhere in your code, within a method implementation:  
myButton.enabled = false   

但是使用 IBAction 按钮可以做到这一点吗?

是的。这是可能的。您可以将 UIButton 对象发送到其他函数来实现此目的。

@IBAction func buttonAction(_ sender: UIButton) {
     self.receiveEvent(sender: sender)
}

func receiveEvent(sender:UIButton) {
     sender.isEnabled = false
}

希望对您有所帮助。

是的,您可以随时更改 status 属性..

    @IBOutlet var BtnOne:UIButton!
    @IBOutlet var BtnTwo:UIButton!

    @IBAction func btnOnePressed (_ sender: Any) {
        print("BtnOne is disabled") 
        BtnOne.isEnabled = false // or true
        //you can call any func
        btnTwoPressed()
    }

    @IBAction func btnTwoPressed (_ sender: Any) {
        print("BtnOne is enabled")
        BtnOne.isEnabled = true
    }

您对 @IBAction 的含义有点困惑。

这是一种将故事板中的动作(通常 .touchUpInside 用于 UIButton)连接到代码中的函数的方法。 sender 参数 成为 被点击的按钮。

此代码,例如:

@IBAction func buttonTapped(_ sender: UIButton) {
     // code here
}

可以指定为控制器中许多不同按钮的 .touchUpInside 操作。想想一组标记为 1 到 10 的按钮。将每个按钮连接到 @IBAction,并且:

@IBAction func buttonTapped(_ sender: UIButton) {
     print("You tapped the button labeled: \(sender.currentTitle)")
}

如果您有对按钮对象的引用,您可以可以获取分配给它的操作(通过代码或故事板分配 @IBAction),使用 actions(forTarget:forControlEvent:) 方法,但这相当复杂,可能不适合。

举个例子,虽然......假设你的视图中有一个按钮连接到上面显示的 @IBAction,你可以这样做:

override func viewDidLoad() {
    super.viewDidLoad()

    for v in view.subviews {
        if let b = v as? UIButton,
            let a = b.actions(forTarget: self, forControlEvent: .touchUpInside) {
            if a.contains("buttonTapped:") {
                print("Found button with buttonTapped: IBAction \(b)")
            }
        }
    }
}

不过,将按钮连接到 @IBOutlets(或连接到 @IBOutlet Collection 会容易得多。如果您的代码确实在尝试查找连接到的按钮(或多个按钮) @IBAction,您可能想重新评估您的代码设计。