代码之家  ›  专栏  ›  技术社区  ›  MrX

某些按钮中的单选`

  •  1
  • MrX  · 技术社区  · 9 年前

    UIButton

    enter image description here

    我想实现单选,但我不知道如何做到这一点。条件如下:

    首先 ALL VCU 按钮 VCU 按钮将处于正常状态(不亮)。

    代码段:

    @IBAction func buttonDisplayAction(_ sender: UIButton) {
        if sender == self.buttonAll {
            self.currNr = -1
            self.filteredDataRoomStatus = self.dataRoomStatus
        } else if sender == self.buttonVCU {
            self.currNr = 1
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "zistatus", searchStr: "\(self.currNr)", equalFlag: true)
        } else if sender == self.buttonOC {
            self.currNr = 5
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "zistatus", searchStr: "\(self.currNr)", equalFlag: true)
        } else if sender == self.buttonVCC {
            self.currNr = 0
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "zistatus", searchStr: "\(self.currNr)", equalFlag: true)
        } else if sender == self.buttonVD {
            self.currNr = 2
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "checkout zistatus", searchStr: "0 2", equalFlag: false)
        } else if sender == self.buttonED {
            self.currNr = 3
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "zistatus", searchStr: "\(self.currNr)", equalFlag: true)
        } else if sender == self.buttonOD {
            self.currNr = 4
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "zistatus", searchStr: "\(self.currNr)", equalFlag: true)
        } else if sender == self.buttonCO {
            self.currNr = 12
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "checkout", searchStr: "1", equalFlag: true)
        } else if sender == self.buttonDnD {
            self.currNr = 8
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "zistatus", searchStr: "\(self.currNr)", equalFlag: true)
        } else if sender == self.buttonOOO {
            self.currNr = 6
            self.isButtonSelected = true
            self.filteredDataRoomStatus = filterArray(dataRoomStatus, keywords: "zistatus", searchStr: "\(self.currNr)", equalFlag: true)
        }
    
        do {
            let currButton: UIButton = (sender as UIButton)
            currButton.isSelected = !currButton.isSelected
    
            if currButton.isSelected {
                currButton.backgroundColor = UIColor.darkGray
            } else {
                currButton.backgroundColor = UIColor.clear
            }
       }
    }
    

    上面的代码进行了多重选择,但我需要一个单一的选择。 this 和 this 但我还是被困住了。

    4 回复  |  直到 7 年前
        1
  •  7
  •   Jaydeep Vyas    8 年前

    @IBAction func onClickButton(_ sender: UIButton) {
        deselectAllButtons()
        sender.isSelected = true
    }
    func deselectAllButtons(){
        for subView in view.subviews 
          {
            // Set all the other buttons as normal state
            if let button = subView as? UIButton {
                button.isSelected = false
            }
        }
       //Or you can simply do write above for loop code with one line
      /*
       view.subviews.forEach { ($0 as? UIButton)?.isSelected = false }
      */
    }
    
        2
  •  4
  •   Ben Ong    9 年前

    当按钮数量很大时,我建议您跟踪最后选择的按钮。在所有现有按钮的基础上创建一个

    var lastSelectedButton: UIButton()
    

    然后在你的 buttonDisplayAction

    @IBAction func buttonDisplayAction(_ sender: UIButton) {
    
        lastSelectedButton.isSelected = false //Plus any deselect logic for this button
        lastSelectedButton = sender //If any buttons are not affect by this selection logic exclude them here
        sender.isSelected = true
        ...
    }
    

    此外,您可以使用 titleColor(for:) 更改按钮颜色的步骤 .selected 状态按钮的背景色 .已选择 状态默认为 tintColor

        3
  •  2
  •   Lawliet    9 年前

    您可以在视图中将所有子视图作为按钮选中, 突出 唯一选定的按钮。在这种情况下,我使用 backgroundColor 如代码示例所示。

         @IBAction func buttonDisplayAction(_ sender: UIButton) {
            // ...
    
            for subView in view.subviews {            
                // Set all the other buttons as normal state
                if let button: UIButton = subView as? UIButton {
                    button.isHighlighted = false
                }
            }
            // Highlight the current selected
            sender.isHighlighted = true
        }
    

    如果您希望在高亮/取消高亮后更改按钮背景色,并打算将其应用于一组按钮,则可以覆盖 isHighlighted 为方便起见,变量。

    extension UIButton {
        open override var isHighlighted: Bool {
            didSet {
                if isHighlighted {
                    backgroundColor = .darkGray
                } else {
                    backgroundColor = .clear
                }
            }
        }
    }
    
        4
  •  1
  •   Praveen Reddy    6 年前

       class SignUpStep1VC: UIViewController {
    
            @IBOutlet weak var btnPersonal: UIButton!
            @IBOutlet weak var btnPersonal1: UIButton!
    
    
            @IBOutlet weak var btnCompany: UIButton!
            @IBOutlet weak var btnICO: UIButton!
    
    
            @IBOutlet weak var btnCompany1: UIButton!
            @IBOutlet weak var btnICO1: UIButton!
    
            var strAccountType:String = "Personal"
            var ButtonsArr = [(btn:UIButton,text:String)]()
    
            override func viewDidLoad() {
                super.viewDidLoad()
                btnNext.layer.cornerRadius = 20
                btnPersonal.isSelected = true
                ButtonsArr.append((btn: btnPersonal, text: "Personal"))
                ButtonsArr.append((btn: btnICO, text: "ICO"))
                ButtonsArr.append((btn: btnCompany, text: "Company"))
                ButtonsArr.append((btn: btnPersonal1, text: "Personal"))
                ButtonsArr.append((btn: btnICO1, text: "ICO"))
                ButtonsArr.append((btn: btnCompany1, text: "Company"))
        }
    
       @IBAction func btnSelect_click(_ sender: UIButton) {
    
            ButtonsArr.forEach{
                $0.btn.isSelected = false
            }
    
            strAccountType = ButtonsArr[sender.tag].text
            ButtonsArr[sender.tag].btn.isSelected = true
    
        }
    
        }