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



这绝对不是禁用按钮的重复。我经历了好几次都没有成功。事实上,我根本不记得在那里见过sender.enabled。我在苹果开发者论坛上找到了那个代码。

您能否通过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按钮可以实现类似的功能吗。

是的,您可以根据需要更改status属性。。

@IBOutlet var BtOne:UIButton!@IBOutlet var BtnTwo:UIButton!@IBA操作函数btnOnePressed(_发件人:任意){print("BtOne is disabled")BtnOne.isEnabled=false//或true//你可以调用任何函数btnTwoPressed()}@IBA操作函数btnTwoPressed(_发件人:任意){print("Btone is enabled")BtnOne.isEnabled=true}

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

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

我希望这能有所帮助。

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

这是一种将故事板中的动作(通常是UIButton.touchUpInside)连接到代码中的函数的方法。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)")
}

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

举个例子来说。。。假设您的视图中有一个按钮连接到上面显示的@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)")
}
}
}
}

不过,您可以更轻松地将按钮连接到@IBOutlet(或@IBOutlet Collection)。如果您的代码真的试图找到一个或多个与@IBAction连接的按钮,您可能需要重新评估代码设计。