这绝对不是禁用按钮的重复。我经历了好几次都没有成功。事实上,我根本不记得在那里见过sender.enabled
。我在苹果开发者论坛上找到了那个代码。
您能否通过sender参数引用IBAction
按钮,并从代码中的其他位置更改其状态?在IBAction
闭包中更改按钮的状态看起来像:sender.enabled = false
或sender.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
连接的按钮,您可能需要重新评估代码设计。