繁体   English   中英

iOS Swift 5 无法在自定义视图中禁用按钮

[英]iOS Swift 5 unable to disable button in custom view

我有一个带有两个按钮的自定义视图,自定义视图有一个关联的UIView class 文件。

这个想法是button2被禁用,直到button1被按下,然后一旦它( button2 )被按下button2被禁用。

请注意,禁用是指禁用交互并且按钮显示为灰色。 奇怪的是交互禁用,但按钮没有变灰

我正在使用button2.isEnabled = false当按钮是主视图的一部分时,这非常有效,但是由于将按钮重构为自定义视图,我似乎无法禁用按钮(按钮变灰)。 自定义视图提供了很好的关注点分离,所以我不想丢失它。

我似乎确实能够根据需要设置按钮的标题,所以我相信我已经正确定义了按钮IBOutlet

按钮的@IBAction被正确触发。

相当有趣的是,在界面生成器中,即使在属性检查器中取消选择enabled ,该按钮也会显示在非灰色 state 中。

谢谢

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
    }
}

请注意,这是针对 iOS 10 及更高版本的 Xcode 11 中的 Storyboard 项目。

我不相信你的代码有什么问题。

When you select a color other than the default for a UIButton , you also need to select a color for the Disabled state.

Select 默认文本颜色:

在此处输入图像描述

将 State 配置更改为已禁用,并将 select 更改为文本颜色:

在此处输入图像描述

现在,在 Storyboard 中,您可以在切换启用复选框时看到差异:

在此处输入图像描述

在此处输入图像描述

(我选择蓝色作为禁用只是为了清楚它没有使用“默认灰色”)

我在 Xcode 中尝试过。 遇到了同样的问题。 我用这个解决了这个问题

private func commonInit() {
    ...
    // button is still enabled
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.001) {
        button2.isEnabled = false
    }
}

让我知道它是否有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM