代码之家  ›  专栏  ›  技术社区  ›  Chris Herbst

单选按钮组Swift 3 Xcode 8

  •  2
  • Chris Herbst  · 技术社区  · 8 年前

    我搜索了各种来源,找不到一个清晰简单的解决方案来为iOS应用程序在具有Xcode 8.3的Swift 3中创建等效单选按钮组。

    @IBAction func buttonA(_ sender: Any) {
        buttonB.isChecked = false
        buttonC.isChecked = false
    }
    
    @IBAction func buttonB(_ sender: Any) {
        buttonA.isChecked = false
        buttonC.isChecked = false
    }
    
    @IBAction func buttonC(_ sender: Any) {
        buttonA.isChecked = false
        buttonB.isChecked = false
    }
    

    如果您能提供更有效的解决方案,我们将不胜感激。

    4 回复  |  直到 8 年前
        1
  •  5
  •   Sweeper    8 年前

    你可以连接你所有的按钮 IBAction

    @IBAction func buttonClick(_ sender: UISwitch) { // you're using UISwitch I believe?
    
    }
    

    您应该将所有按钮添加到一个数组中:

    // at class level
    var buttons: [UISwitch]!
    
    // in viewDidLoad
    buttons = [buttonA, buttonB, buttonC]
    

    然后,写下 buttonClick

    buttons.forEach { $0.isChecked = false } // uncheck everything
    sender.isChecked = true // check the button that is clicked on
    

    选择:

    尝试使用 UITableView accessoryType .checkMark 每隔一排 .none

    如果你太懒,试着继续搜索 cocoapods.org 看看其他人做了什么。

        2
  •  3
  •   Divyanshu Sharma    8 年前

    只需为所有三个按钮的touchUpInside事件创建一个选择器,并在IB中为正常状态设置radio\u off image,为选定状态设置Radiou on image,然后只需将btnClicked方法连接到所有按钮的touchUpInside事件

    class ViewController: UIViewController {
    
    @IBOutlet weak var btnFirst:UIButton!
    
    @IBOutlet weak var btnSecond:UIButton!
    
    @IBOutlet weak var btnThird:UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    @IBAction func btnClicked(sender:UIButton){
    
        let buttonArray = [btnFirst,btnSecond,btnThird]
    
        buttonArray.forEach{
    
            $0?.isSelected = false
    
        }
    
        sender.isSelected = true
    
    }
    
        3
  •  0
  •   Jereme    8 年前

    UITableView -使用 UITableView 用复选标记装饰。如果这些单选按钮的布局相当传统,那么这就是正确的范例。如果布局是网格而不是列表,则可以使用 UICollectionView

    您可以使用 func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) 在里面 UITableViewDelegate 以捕获选择。你可以打电话 indexPathForSelectedRow

    https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/CreateATableView.html


    protocol RadioButtonDelegate: class {
        func didTapButton(_ button: UIButton)
    }
    
    class RadioButtonGroup {
        private var buttons: [UIButton] = []
        weak var delegate: RadioButtonDelegate?
    
        var selectedButton: UIButton? { return buttons.filter { $0.isSelected }.first }
    
        func addButton(_ button: UIButton) {
            buttons.append(button)
        }
    
        @objc private func didTapButton(_ button: UIButton) {
            button.isSelected = true
    
            deselectButtonsOtherThan(button)
    
            delegate?.didTapButton(button)
        }
    
        private func deselectButtonsOtherThan(_ selectedButton: UIButton) {
            for button in buttons where button != selectedButton {
                button.isSelected = false
            }
        }
    }
    
    class MyView: UIView {
        private var radioButtonGroup = RadioButtonGroup()
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
    
            let button1 = UIButton(type: .custom)
            button1.setTitle("Eeeny", for: .normal)
            let button2 = UIButton(type: .custom)
            button2.setTitle("Meeny", for: .normal)
            let button3 = UIButton(type: .custom)
            button3.setTitle("Miny", for: .normal)
    
            self.radioButtonGroup.addButton(button1)
            self.radioButtonGroup.addButton(button2)
            self.radioButtonGroup.addButton(button3)
    
            addSubview(button1)
            addSubview(button2)
            addSubview(button3)
        }
    }
    
        4
  •  0
  •   UsamaDev    3 年前
    import UIKit
    

    类ViewController:UIViewController{

    @IBOutlet weak var maleLB: UIButton!
    @IBOutlet weak var femaleLB: UIButton!
    @IBOutlet weak var otherLB: UIButton!
    
    var gender = "Male"
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        if gender == "Male"{
            femaleLB.isSelected = true
        }
    }
    
    @IBAction func maleBtn(_ sender: UIButton) {
        if sender.isSelected {
            sender.isSelected = false
            femaleLB.isSelected = false
            otherLB.isSelected = false
        }
        else{
            sender.isSelected = true
            femaleLB.isSelected = false
            otherLB.isSelected = false
            
        }
    }
    @IBAction func femaleBtn(_ sender: UIButton) {
        if sender.isSelected {
            sender.isSelected = false
            maleLB.isSelected = false
            otherLB.isSelected = false
        }
        else{
            sender.isSelected = true
            maleLB.isSelected = false
            otherLB.isSelected = false
            
        }
    }
    @IBAction func otherBtn(_ sender: UIButton) {
        if sender.isSelected {
            sender.isSelected = false
            maleLB.isSelected = false
            femaleLB.isSelected = false
        }
        else{
            sender.isSelected = true
            maleLB.isSelected = false
            femaleLB.isSelected = false
            
        }
    
    }