提问者:小点点

Swift5当另一个按钮启用时如何禁用UIButton


我使用的是macOS Catalina 10.15.5和Xcode11.5。

我的主故事板上有两个UI按钮,分别是“今天按钮”和“明天按钮”。

我想要的是当‘今天按钮’被按下时,‘明天按钮’被禁用。

此外,如果按下了“明天按钮”,则应禁用“今天按钮”。

我将这些与@IBOutlet连接起来,如下所示。

@IBOutlet weak var todayBtnOutlet: UIButton!
@IBOutlet weak var tmrwBtnOutlet: UIButton!

在viewDidLoad内部,它看起来是这样的。

override func viewDidLoad() {
    super.viewDidLoad()
    
    todayBtnOutlet.isEnabled = true
   
    tmrwBtnOutlet.isEnabled = false
   
}

然后我在view controller类的末尾创建了这些代码。

@IBAction func todayBtn(_ sender: UIButton) {
  
    if tmrwBtnOutlet.isEnabled == true {
        tmrwBtnOutlet.isEnabled = false
        todayBtnOutlet.isEnabled = true
    }
    todayBtnOutlet.isEnabled = true
}


@IBAction func tmrwBtn(_ sender: UIButton) {
    
    if todayBtnOutlet.isEnabled == true {
        todayBtnOutlet.isEnabled = false
        tmrwBtnOutlet.isEnabled = true
    }
    tmrwBtnOutlet.isEnabled = true
}

我运行模拟器,弹出的第一件事是‘今天按钮’是启用的,‘明天按钮’是禁用的。 但当我点击“明天按钮”时,什么也没发生。

我知道这些代码很愚蠢,但是请你不要客气,因为我对代码世界还是个新手。

我会感激你的回答!


共1个答案

匿名用户

Enabled属性不是实现所需效果所需的。 您要做的是使用按钮的IsSelected属性,这是UIButton的可能状态。 UIbutton可能处于几种可能状态之一(例如正常选定突出显示)。

当您第一次在屏幕上显示按钮时,它通常处于正常状态(除非您手动更改该行为)。

接下来可以做的是为按钮的不同状态应用不同的样式(应该使用normalselected状态)。 您可以在interface builder(storyboard或xib)中执行此操作,也可以在代码中应用样式:

let button = UIButton()
button.setBackgroundImage(normalStateImage, forState: .normal)
button.setBackgroundImage(selectedStateImage, forState: .selected)

其中NormalStateImageSelectedStateImage是将为这两种状态呈现的UImage(有关如何使用UIButton的背景图像/颜色的更多详细信息,请参见如何在突出显示时更改UIButton的背景颜色)。

这样,按钮在按下时仍然会生成事件。