簡體   English   中英

單選按鈕組 Swift 3 Xcode 8

[英]Radio Button Group Swift 3 Xcode 8

我已經搜索了各種來源,但找不到一個清晰而簡單的解決方案,可以在 Swift 3 中使用 Xcode 8.3 為 iOS 應用程序創建等效的單選按鈕組。

例如,如果我在一組中有 3 個按鈕,並且一次只能選擇一個。 目前,我通過在選擇另一個按鈕時將組中的 2 個按鈕的狀態更改為未選擇來實現這一點,反之亦然。

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

但是,我希望有一種更有效的方法來做到這一點。

任何有關更有效解決方案的幫助將不勝感激。

您可以將所有按鈕的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上搜索,看看其他人做了什么。

只需為所有三個按鈕的 touchUpInside 事件創建一個選擇器,並在您的 IB 中為正常狀態設置 radio_off 圖像,為選定狀態設置 radio_on 圖像,然后只需將 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

}

根據您的 UI,您可以采用多種方法。

UITableView - 使用帶有復選標記裝飾器的UITableView 如果這些單選按鈕的布局相當傳統,那么這是正確的范例。 如果布局是網格而不是列表,則可以使用UICollectionView

您可以使用UITableViewDelegate中的func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int)來捕獲選擇。 當您想要提交更改以確定選擇了哪個單元格時,您可以在 tableView 上調用indexPathForSelectedRow

Apple 關於 UITableView 的教程可以在以下位置找到:

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


管理一組 UIButtons - 您可以存儲對作為單選按鈕組一部分的 UIButton 對象的引用數組。

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)
    }
}
import UIKit

類視圖控制器: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
        
    }

}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM