你能在 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 = false
或 sender.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)")
}
}
}
}
不过,将按钮连接到 @IBOutlet
s(或连接到 @IBOutlet Collection
会容易得多。如果您的代码确实在尝试查找连接到的按钮(或多个按钮) @IBAction
,您可能想重新评估您的代码设计。
这绝对不是禁用按钮的副本。我经历了几次都没有成功。事实上,我根本不记得在那里见过 sender.enabled
。我在 Apple Developer's Forum 中找到了该代码。
您能否通过 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
按钮可以做到这一点吗?
是的。这是可能的。您可以将 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)")
}
}
}
}
不过,将按钮连接到 @IBOutlet
s(或连接到 @IBOutlet Collection
会容易得多。如果您的代码确实在尝试查找连接到的按钮(或多个按钮) @IBAction
,您可能想重新评估您的代码设计。