你可以在闭包之外更改IBAction按钮的状态吗? - 斯威夫特4

问题描述 投票:0回答:3

这绝对不是禁用按钮的重复。我经历过好几次都没有成功。事实上,我不记得在那里看到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 swift4 ibaction iboutlet
3个回答
1
投票

是的,您可以在需要时更改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
    }

1
投票

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

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

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

我希望这有帮助。


1
投票

你对@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的按钮(或按钮),您可能需要重新评估您的代码设计。

© www.soinside.com 2019 - 2024. All rights reserved.