iOS Swift 5 无法在自定义视图中禁用按钮
iOS Swift 5 unable to disable button in custom view
我有一个带有两个按钮的自定义视图,自定义视图有一个关联的 UIView
class 文件。
想法是 button2
被禁用,直到 button1
被按下,然后一旦它 (button2
) 被按下 button2
被禁用。
请注意,禁用我的意思是交互被禁用并且按钮是灰色的。奇怪的是交互 is 被禁用但是按钮 isint 变灰了
我正在使用 button2.isEnabled = false
当按钮是主视图的一部分时,它工作得很好,但是由于将按钮重构为自定义视图,我似乎无法禁用按钮(按钮变灰) .自定义视图提供了很好的关注点分离,所以我不想丢失它。
我似乎能够根据需要设置按钮的标题,所以我相信我已经正确定义了按钮 IBOutlet
。
按钮的 @IBAction
被正确触发。
有趣的是,即使在 属性 检查器中取消选择了 enabled
,界面构建器中的按钮仍处于 non-greyed 退出状态。
谢谢
class ControlPanelView: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBAction func button1Action(_ sender: Any) {
button2.isEnabled = true
}
@IBAction func button2Action(_ sender: Any) {
button2.isEnabled = false
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
Bundle.main.loadNibNamed("ControlPanelView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
// button is still enabled
button2.isEnabled = false
}
}
请注意,这是 Xcode 11 中针对 iOS 10 及更高版本的 Storyboard 项目。
我在Xcode试过了。有同样的问题。我用这个解决了这个问题
private func commonInit() {
...
// button is still enabled
DispatchQueue.main.asyncAfter(deadline: .now() + 0.001) {
button2.isEnabled = false
}
}
如果有帮助请告诉我。
我认为您的代码没有任何问题。
当你select一个颜色不是默认为UIButton
时,你还需要select一个颜色为Disabled状态。
Select 默认文本颜色:
将状态配置更改为禁用并select 文本颜色:
现在,在 Storyboard 中,您可以在切换“已启用”复选框时看到不同之处:
(我 select 为禁用设置了蓝色只是为了说明它没有使用“默认灰色”)
我有一个带有两个按钮的自定义视图,自定义视图有一个关联的 UIView
class 文件。
想法是 button2
被禁用,直到 button1
被按下,然后一旦它 (button2
) 被按下 button2
被禁用。
请注意,禁用我的意思是交互被禁用并且按钮是灰色的。奇怪的是交互 is 被禁用但是按钮 isint 变灰了
我正在使用 button2.isEnabled = false
当按钮是主视图的一部分时,它工作得很好,但是由于将按钮重构为自定义视图,我似乎无法禁用按钮(按钮变灰) .自定义视图提供了很好的关注点分离,所以我不想丢失它。
我似乎能够根据需要设置按钮的标题,所以我相信我已经正确定义了按钮 IBOutlet
。
按钮的 @IBAction
被正确触发。
有趣的是,即使在 属性 检查器中取消选择了 enabled
,界面构建器中的按钮仍处于 non-greyed 退出状态。
谢谢
class ControlPanelView: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBAction func button1Action(_ sender: Any) {
button2.isEnabled = true
}
@IBAction func button2Action(_ sender: Any) {
button2.isEnabled = false
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
Bundle.main.loadNibNamed("ControlPanelView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
// button is still enabled
button2.isEnabled = false
}
}
请注意,这是 Xcode 11 中针对 iOS 10 及更高版本的 Storyboard 项目。
我在Xcode试过了。有同样的问题。我用这个解决了这个问题
private func commonInit() {
...
// button is still enabled
DispatchQueue.main.asyncAfter(deadline: .now() + 0.001) {
button2.isEnabled = false
}
}
如果有帮助请告诉我。
我认为您的代码没有任何问题。
当你select一个颜色不是默认为UIButton
时,你还需要select一个颜色为Disabled状态。
Select 默认文本颜色:
将状态配置更改为禁用并select 文本颜色:
现在,在 Storyboard 中,您可以在切换“已启用”复选框时看到不同之处:
(我 select 为禁用设置了蓝色只是为了说明它没有使用“默认灰色”)