【问题标题】:How can I deselect a button when other consecutive button is pressed?按下其他连续按钮时如何取消选择按钮?
【发布时间】:2021-07-16 07:50:07
【问题描述】:

我正在创建一个有5个按钮的测试,每个按钮对应一种特定的颜色,问题是当我选择连续的第二个按钮时,前一个按钮仍然被选中,我怎样才能让我的代码只选择一个一次按钮并取消选择上一个按钮?

我该如何解决这个问题?

这是我的代码

class ViewController: UIViewController {
    
    

    var buttonPressed: Bool = false
    
    @IBOutlet weak var button1: UIButton!
    @IBAction func buttonAction1(_ sender: UIButton) {
        if buttonPressed {
            
            buttonPressed = false
            button1.setImage(UIImage(named: "Bolinha-5"), for: .normal)
        }
        else {
            buttonPressed = true
            button1.setImage(UIImage(named: "Bolinha-4"), for: .normal)
        }
      
            

        
    }
    
    @IBOutlet weak var button2: UIButton!
    @IBAction func buttonAction2(_ sender: UIButton) {
        if buttonPressed {
            
            buttonPressed = false
            button2.setImage(UIImage(named: "Bolinha-5"), for: .normal)
        }
        else {
            buttonPressed = true
            button2.setImage(UIImage(named: "Bolinha-4"), for: .normal)
        }
        
    }

    @IBOutlet weak var button3: UIButton!
    @IBAction func buttonAction3(_ sender: UIButton) {
        if buttonPressed {
            
            buttonPressed = false
            button3.setImage(UIImage(named: "Bolinha-2"), for: .normal)
        }
        else {
            buttonPressed = true
            button3.setImage(UIImage(named: "Bolinha-4"), for: .normal)
        }
        
    }
    
    

    
    @IBOutlet weak var button4: UIButton!
    @IBAction func buttonAction4(_ sender: UIButton) {
        if buttonPressed {
            
            buttonPressed = false
            button4.setImage(UIImage(named: "Bolinha-3"), for: .normal)
        }
        else {
            buttonPressed = true
            button4.setImage(UIImage(named: "Bolinha-4"), for: .normal)
        }
        
    }
   
    
    @IBOutlet weak var button5: UIButton!
    @IBAction func buttonAction5(_ sender: UIButton) {
        if buttonPressed {
            
            buttonPressed = false
            button5.setImage(UIImage(named: "Bolinha-3"), for: .normal)
        }
        else {
            buttonPressed = true
            button5.setImage(UIImage(named: "Bolinha-4"), for: .normal)
        }
        
    }
}

【问题讨论】:

  • 看起来像简单的错别字:你在 button1.setImage in buttonAction5 etc.
  • 谢谢!我没注意到
  • 是的,我确实注意到了。但是您实际上并没有在您的 IBAction 方法中引用这些网点。比如buttonAction5,你还是说button1.setImage,所以它设置了button1的形象。哦,我刚刚注意到,如果你想单独控制它们,你还需要 5 个不同的 buttonPressed 变量。您可能需要考虑使用数组来存储状态和按钮,并使用标签来标识按钮。
  • 谢谢!它起作用了,我知道也许我不应该在 cmets 中问这个问题,但现在我的下一个问题是,当我单击第二个按钮时,例如,我单击 button1 然后单击 button2,两个按钮都被选中,怎么能我取消选择之前按下的按钮,所以屏幕上只能更改一个按钮? Ps:如果您认为这更适合 StackOverflow 我可以创建另一个问题
  • 您可以为每个按钮设置一个标签值。当按下一个按钮时,您可以保存当前标签,然后在所有按钮上执行 for 循环,并取消选择那些与您之前保存的标签不同的标签。

标签: ios swift xcode button uistackview


【解决方案1】:

您要完成的操作称为单选按钮,不幸的是 iOS(与 macOS 不同)不提供此功能。

我的建议是利用在 Interface Builder 中将不同图像分配给不同状态的选项——在本例中为 DefaultSelected 状态——并创建一个 outlet 集合,一个表示一系列 UI 元素的数组同一类型。

建议不支持空选,默认选择第一个按钮。


  • 在视图控制器中

    • 创建一个出口集合

      @IBOutlet var buttons : [UIButton]!
      
    • 还有一个IBAction

       @IBAction func buttonAction(_ sender: UIButton) { }
      
  • 在接口构建器中

    • 将图像设置为属性检查器中每个按钮的DefaultSelected 状态。
    • 以正确的顺序将按钮连接到插座集合。
    • 按相同顺序将标签 0 到 4 分配给按钮。
    • 将所有按钮也连接到(相同的)IBAction。
  • 在视图控制器中

    • 为当前选中按钮的标签创建一个属性

       var selectedButton = 0
      
    • 在 viewDidLoad 中选择第一个按钮

       override func viewDidLoad() {
           super.viewDidLoad()
           buttons[selectedButton].isSelected = true
       }
      
    • 完成IBAction,它取消选择上一个按钮并选择当前按钮。

       @IBAction func buttonAction(_ sender: UIButton) {
           let tag = sender.tag
           buttons[selectedButton].isSelected = false
           buttons[tag].isSelected = true
           selectedButton = tag
       }
      

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2015-02-27
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多