स्विफ्ट (iOS) में रेडियो बटन और चेकबॉक्स कैसे बनाएं?


85

मैं एक ऐप विकसित कर रहा हूं जो सर्वेक्षण करने की अनुमति देता है। मेरा लेआउट XML आधारित प्रश्नों से उत्पन्न होता है।

मुझे रेडियो बटन (एकल विकल्प) और चेकबॉक्स (बहु उत्तर) बनाने की आवश्यकता है। मुझे स्विफ्ट के लिए कुछ भी उपयोगी नहीं मिला।

क्या किसी को कुछ पता है?


5
आपको चेकबॉक्स छवि या रेडियो बटन छवि के रूप में पृष्ठभूमि छवि के साथ कई बटन बनाने की आवश्यकता है ... बटन के क्लिक पर, छवि को चयनित छवि के रूप में बदलें ... दो छवियों का सेट होना चाहिए, अर्थात। एक का चयन किया जाता है, दूसरे को अचयनित के लिए ..
RJV कुमार

2
चूंकि Xcode / iOS चेकबॉक्स / रेडियो बटन प्रदान नहीं करता है, इसलिए मैं भी RJV के सुझाव का उपयोग करता हूं।
बिस्टा

यह मैंने कोशिश की, यह काम कर रहा है।
वानीयन

क्या आपने चेकबॉक्स और रेडियो बटन के लिए कोकोपोड लाइब्रेरीज़ का उपयोग करने की कोशिश की?
विमुक्ति राजपक्ष

जवाबों:


40

रेडियो बटन और चेकबॉक्स के लिए ऐसा कुछ भी नहीं है जो निर्मित हो।

आप चेकबॉक्स को स्वयं आसानी से कार्यान्वित कर सकते हैं। आप UIControlStateNormal के लिए अपने बटन के लिए एक अनचेक करें और अपने UIControlStateSelected के लिए एक CheckImage सेट कर सकते हैं। अब नल पर, बटन अपनी छवि को बदल देगा और चेक और अनियंत्रित छवि के बीच वैकल्पिक होगा।

रेडियो बटन का उपयोग करने के लिए, आपको उन Arrayसभी बटनों के लिए रखना होगा जिन्हें आप रेडियो बटन के रूप में व्यवहार करना चाहते हैं। जब भी एक बटन दबाया जाता है, तो आपको सरणी में अन्य सभी बटन को अनचेक करना होगा।

रेडियो बटन के लिए आप SSRadioButtonsController का उपयोग कर सकते हैं आप एक नियंत्रक ऑब्जेक्ट बना सकते हैं और बटन सरणी को इसमें जोड़ सकते हैं

var radioButtonController = SSRadioButtonsController()
radioButtonController.setButtonsArray([button1!,button2!,button3!])

मुख्य सिद्धांत कुछ इस तरह है यहाँ


153

चेक बॉक्स

आप अपना स्वयं का चेकबॉक्स नियंत्रण बना सकते हैं जो स्विफ्ट के साथ यूब्यूटॉन का विस्तार कर रहा है:

import UIKit

class CheckBox: UIButton {
    // Images
    let checkedImage = UIImage(named: "ic_check_box")! as UIImage
    let uncheckedImage = UIImage(named: "ic_check_box_outline_blank")! as UIImage
    
    // Bool property
    var isChecked: Bool = false {
        didSet {
            if isChecked == true {
                self.setImage(checkedImage, for: UIControl.State.normal)
            } else {
                self.setImage(uncheckedImage, for: UIControl.State.normal)
            }
        }
    }
        
    override func awakeFromNib() {
        self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControl.Event.touchUpInside)
        self.isChecked = false
    }
        
    @objc func buttonClicked(sender: UIButton) {
        if sender == self {
            isChecked = !isChecked
        }
    }
}

और फिर इसे इंटरफ़ेस बिल्डर के साथ अपने विचारों में जोड़ें:

यहां छवि विवरण दर्ज करें

रेडियो के बटन

रेडियो बटन को इसी तरह से हल किया जा सकता है।

उदाहरण के लिए, क्लासिक लिंग चयन महिला - पुरुष :

यहां छवि विवरण दर्ज करें

import UIKit

class RadioButton: UIButton {
    var alternateButton:Array<RadioButton>?
    
    override func awakeFromNib() {
        self.layer.cornerRadius = 5
        self.layer.borderWidth = 2.0
        self.layer.masksToBounds = true
    }
    
    func unselectAlternateButtons() {
        if alternateButton != nil {
            self.isSelected = true
            
            for aButton:RadioButton in alternateButton! {
                aButton.isSelected = false
            }
        } else {
            toggleButton()
        }
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        unselectAlternateButtons()
        super.touchesBegan(touches, with: event)
    }
    
    func toggleButton() {
        self.isSelected = !isSelected
    }
    
    override var isSelected: Bool {
        didSet {
            if isSelected {
                self.layer.borderColor = Color.turquoise.cgColor
            } else {
                self.layer.borderColor = Color.grey_99.cgColor
            }
        }
    }
}

आप इस तरह से अपने रेडियो बटन init कर सकते हैं:

    override func awakeFromNib() {
        self.view.layoutIfNeeded()
        
        womanRadioButton.selected = true
        manRadioButton.selected = false
    }
    
    override func viewDidLoad() {
        womanRadioButton?.alternateButton = [manRadioButton!]
        manRadioButton?.alternateButton = [womanRadioButton!]
    }

आशा है कि इससे सहायता मिलेगी।


1
स्विफ्ट 3 के लिए आपको बटन को बदलने की जरूरत है। विधि को
फेक बटन पर क्लिक करें

1
पहली बार में मैं अपने चेकबॉक्स के साथ किसी भी छवि को नहीं देख सकता ... यह केवल क्लिक करने के बाद दिखाई देता है ... कृपया मेरी मदद करें
एच रावल

2
Hi @Nitesh आप सार्वजनिक बूल संपत्ति का उपयोग करके चेक की गई स्थिति प्राप्त कर सकते हैं, उदाहरण के लिए: myCheckbox.isChecked {...}
crubio

1
@ जेरलैंड 2 कोई विचार नहीं है कि आपके किसी भी कोड को देखे बिना। बूलियन चेक को इमेज से कनेक्ट किया गया है, इसलिए कुछ और होना चाहिए।
क्रुबियो

1
@amorenew यदि आप अभी भी इंटरफ़ेस बिल्डर में दिखाने के लिए देख रहे हैं, तो कृपया मेरे उत्तर को देखें।
महेंद्र लिया

22

की जाँच करें DLRadioButton । आप इंटरफ़ेस बिल्डर से सीधे रेडियो बटन जोड़ और अनुकूलित कर सकते हैं। साथ ही Swiftपूरी तरह से काम करता है।

IOS के लिए स्विफ्ट रेडियो बटन

अपडेट: वर्जन 1.3.2में वर्गाकार बटन जोड़े गए, प्रदर्शन में भी सुधार।

अद्यतन: संस्करण 1.4.4ने कई चयन विकल्प जोड़े, चेकबॉक्स के रूप में भी इस्तेमाल किया जा सकता है।

अद्यतन: संस्करण 1.4.7जोड़ा RTL भाषा समर्थन।


मैं नहीं देखता कि चेकबॉक्स के रूप में अपने बटन का उपयोग कैसे करें? इसमें केवल रेडियो बटन है?
डेलेविथान

1
चेकबॉक्स के रूप में उपयोग करने के लिए, आप सेट कर सकते multipleSelectionEnabledहैं और iconSquareकरने के लिए YES
डेविड लियू

1
अरे @DavidLiu मैं एक मुश्किल समय के लिए अपने पुस्तकालय को लागू कर रहा हूँ 1.2 स्विफ्ट। मैं Ios ऐप्स में बहुत नया हूं, क्या आपका ReadMe.md कुछ बुनियादी चरणों को छोड़ रहा है? मैं बड़ी उलझन में हूं!
मिलाप

1
@milap क्या आप एक समस्या प्रस्तुत कर सकते हैं और नमूना कोड डाल सकते हैं?
डेविड लियू

@DavidLiu मुझे यह काम करने के लिए मिला, बस एंबेडेड बायनेरिज़ में आपके ढांचे को जोड़ने की आवश्यकता थी। सुपर शुरुआती के लिए उस कदम को जोड़ना चाहते हैं!
मिलाप

11

स्विफ्ट 5, एनीमेशन के साथ चेकबॉक्स

बटन का एक आउटलेट बनाएं

@IBOutlet weak var checkBoxOutlet:UIButton!{
        didSet{
            checkBoxOutlet.setImage(UIImage(named:"unchecked"), for: .normal)
            checkBoxOutlet.setImage(UIImage(named:"checked"), for: .selected)
        }
    }

UIButton का एक एक्सटेंशन बनाएं

extension UIButton {
    //MARK:- Animate check mark
    func checkboxAnimation(closure: @escaping () -> Void){
        guard let image = self.imageView else {return}
        
        UIView.animate(withDuration: 0.1, delay: 0.1, options: .curveLinear, animations: {
            image.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
            
        }) { (success) in
            UIView.animate(withDuration: 0.1, delay: 0, options: .curveLinear, animations: {
                self.isSelected = !self.isSelected
                //to-do
                closure()
                image.transform = .identity
            }, completion: nil)
        }
        
    }
}

कैसे इस्तेमाल करे

 @IBAction func checkbox(_ sender: UIButton){
        sender.checkboxAnimation {
            print("I'm done")
            //here you can also track the Checked, UnChecked state with sender.isSelected
            print(sender.isSelected)
            
        }
}

चेकबॉक्स और रेडियो बटन के लिए मेरा उदाहरण देखें https://github.com/rashidlatif55/CheckBoxAndRadbBBton


2
मुझे लगता है कि यह अधिक वोटों का हकदार है। सुरुचिपूर्ण समाधान के लिए धन्यवाद।
कार्लो

जब मैं बटन चुनता हूं तो मुझे एक नीला वर्ग मिलता है। मैं इसे कैसे बना सकता हूं
danu

1
@danu इसे सर्कल बनाने के लिए आप इस लाइन को जोड़ सकते हैं didSet checkBoxOutlet.layer.cornerRadius = checkBoxOutlet.frame.height / 2और नीले रंग को हटाने के लिए tintजब बटन चुना जाता है तो आप इन लाइन को विस्तार से जोड़ सकते हैं self.adjustsImageWhenHighlighted = false self.isHighlighted = false
रशीद लतीफ

1
@danu मैंने आपके लिए बनाया और उदाहरण दिया है, और मेरे उत्तर में एक लिंक प्रदान करता हूं। आप उस के साथ खेल सकते हैं
राशिद लतीफ़

इस प्रकार उत्तर निश्चित रूप से अधिक वोट के लायक है धन्यवाद @RashidLatif
danu

9

वहाँ एक बहुत अच्छा पुस्तकालय है वहाँ आप इसके लिए उपयोग कर सकते हैं (आप वास्तव में इस के स्थान पर उपयोग कर सकते हैं UISwitch): https://github.com/Boris-Em/BEMCheckBox

सेटअप आसान है:

BEMCheckBox *myCheckBox = [[BEMCheckBox alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[self.view addSubview:myCheckBox];

यह सर्कल और वर्ग प्रकार के चेकबॉक्स के लिए प्रदान करता है

यहां छवि विवरण दर्ज करें

और यह भी एनिमेशन करता है:

यहां छवि विवरण दर्ज करें


4

एक बहुत ही सरल चेकबॉक्स नियंत्रण।

 @IBAction func btn_box(sender: UIButton) {
    if (btn_box.selected == true)
    {
        btn_box.setBackgroundImage(UIImage(named: "box"), forState: UIControlState.Normal)

            btn_box.selected = false;
    }
    else
    {
        btn_box.setBackgroundImage(UIImage(named: "checkBox"), forState: UIControlState.Normal)

        btn_box.selected = true;
    }
}

4

छोटा ios स्विफ्ट 4 संस्करण:

@IBAction func checkBoxBtnTapped(_ sender: UIButton) {
        if checkBoxBtn.isSelected {
            checkBoxBtn.setBackgroundImage(#imageLiteral(resourceName: "ic_signup_unchecked"), for: .normal)
        } else {
            checkBoxBtn.setBackgroundImage(#imageLiteral(resourceName: "ic_signup_checked"), for:.normal)
        }
        checkBoxBtn.isSelected = !checkBoxBtn.isSelected
    }

1
यह उत्तर सरल है और कम कोड के साथ समान परिणाम प्राप्त करता है! +1
जूलियन सिल्वेस्ट्री

4

तीसरे पक्ष के पुस्तकालयों का उपयोग किए बिना स्विफ्ट 4.2 में रेडियो बटन के लिए समाधान

RadioButtonController.swift फाइल बनाएं और उसमें निम्नलिखित कोड डालें:

import UIKit

class RadioButtonController: NSObject {
    var buttonsArray: [UIButton]! {
        didSet {
            for b in buttonsArray {
                b.setImage(UIImage(named: "radio_off"), for: .normal)
                b.setImage(UIImage(named: "radio_on"), for: .selected)
            }
        }
    }
    var selectedButton: UIButton?
    var defaultButton: UIButton = UIButton() {
        didSet {
            buttonArrayUpdated(buttonSelected: self.defaultButton)
        }
    }

    func buttonArrayUpdated(buttonSelected: UIButton) {
        for b in buttonsArray {
            if b == buttonSelected {
                selectedButton = b
                b.isSelected = true
            } else {
                b.isSelected = false
            }
        }
    }
}

इसे अपने व्यू कंट्रोलर फाइल में नीचे की तरह इस्तेमाल करें:

import UIKit

class CheckoutVC: UIViewController {

    @IBOutlet weak var btnPaytm: UIButton!
    @IBOutlet weak var btnOnline: UIButton!
    @IBOutlet weak var btnCOD: UIButton!

    let radioController: RadioButtonController = RadioButtonController()

    override func viewDidLoad() {
        super.viewDidLoad()

        radioController.buttonsArray = [btnPaytm,btnCOD,btnOnline]
        radioController.defaultButton = btnPaytm
    }

    @IBAction func btnPaytmAction(_ sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: sender)
    }

    @IBAction func btnOnlineAction(_ sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: sender)
    }

    @IBAction func btnCodAction(_ sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: sender)
    }
}

आस्तियों में Radio_off और Radio_on चित्र जोड़ना सुनिश्चित करें।

छवि पर रेडियो रेडियो ऑफ इमेज

परिणाम:

रेडियो बटन का परिणाम


1
नीट और पुन: प्रयोज्य समाधान। धन्यवाद!
रक एपदेव ४

सटीक !!! यह अधिक स्पष्ट जवाब था। में से RadioButtonControllerउदाहरण के लिए, मैं के टैग बाहर की जाँच करते थे selectedButtonभेद करने के लिए क्या चुना गया है। धन्यवाद दोस्त!
Randika Vishman

2

रेडियो बटन बनाने के लिए कदम

बेसिकस्टेप: टू बटन। चयनित और अचयनित दोनों के लिए सेट छवि। दोनों बटन पर कार्रवाई जोड़ने की तुलना में। अब कोड शुरू करें

1) चर बनाएं:

var btnTag    : Int = 0

2) ViewDidLoad में परिभाषित करें:

 btnTag = btnSelected.tag

3) अब चयनित टैप एक्शन में:

 @IBAction func btnSelectedTapped(sender: AnyObject) {
    btnTag = 1
    if btnTag == 1 {
      btnSelected.setImage(UIImage(named: "icon_radioSelected"), forState: .Normal)
      btnUnSelected.setImage(UIImage(named: "icon_radioUnSelected"), forState: .Normal)
     btnTag = 0
    }
}

4) अनचेक बटन के लिए कोड करें

 @IBAction func btnUnSelectedTapped(sender: AnyObject) {
    btnTag = 1
    if btnTag == 1 {
        btnUnSelected.setImage(UIImage(named: "icon_radioSelected"), forState: .Normal)
        btnSelected.setImage(UIImage(named: "icon_radioUnSelected"), forState: .Normal)
        btnTag = 0
    }
}

रेडियो बटन आपके लिए तैयार है


2

चेकबॉक्स के लिए, आपको UIButton को उप-लिंक करने की आवश्यकता नहीं है। इसे isSelectedसंभालने के लिए पहले से ही संपत्ति है।

checkbox = UIButton.init(type: .custom)
checkbox.setImage(UIImage.init(named: "iconCheckboxOutlined"), for: .normal)
checkbox.setImage(UIImage.init(named: "iconCheckboxFilled"), for: .selected)
checkbox.addTarget(self, action: #selector(self.toggleCheckboxSelection), for: .touchUpInside)

फिर एक्शन विधि में इसे टॉगल करें isSelected

@objc func toggleCheckboxSelection() {
    checkbox.isSelected = !checkbox.isSelected
}

1

आप बस UIButton को उप-वर्ग कर सकते हैं और अपनी आवश्यकताओं के अनुरूप अपना खुद का ड्राइंग कोड लिख सकते हैं। मैंने निम्न कोड का उपयोग करके Android की तरह एक रेडियो बटन लागू किया। इसका उपयोग स्टोरीबोर्ड में भी किया जा सकता है। गितुब रेपो में उदाहरण देखें

import UIKit

@IBDesignable
class SPRadioButton: UIButton {

@IBInspectable
var gap:CGFloat = 8 {
    didSet {
        self.setNeedsDisplay()
    }
}

@IBInspectable
var btnColor: UIColor = UIColor.green{
    didSet{
        self.setNeedsDisplay()
    }
}

@IBInspectable
var isOn: Bool = true{
    didSet{
        self.setNeedsDisplay()
    }
}

override func draw(_ rect: CGRect) {
    self.contentMode = .scaleAspectFill
    drawCircles(rect: rect)
}


//MARK:- Draw inner and outer circles
func drawCircles(rect: CGRect){
    var path = UIBezierPath()
    path = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: rect.width, height: rect.height))

    let circleLayer = CAShapeLayer()
    circleLayer.path = path.cgPath
    circleLayer.lineWidth = 3
    circleLayer.strokeColor = btnColor.cgColor
    circleLayer.fillColor = UIColor.white.cgColor
    layer.addSublayer(circleLayer)

    if isOn {
        let innerCircleLayer = CAShapeLayer()
        let rectForInnerCircle = CGRect(x: gap, y: gap, width: rect.width - 2 * gap, height: rect.height - 2 * gap)
        innerCircleLayer.path = UIBezierPath(ovalIn: rectForInnerCircle).cgPath
        innerCircleLayer.fillColor = btnColor.cgColor
        layer.addSublayer(innerCircleLayer)
    }
    self.layer.shouldRasterize =  true
    self.layer.rasterizationScale = UIScreen.main.nativeScale
}

/*
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    isOn = !isOn
    self.setNeedsDisplay()
}
*/    

override func awakeFromNib() {
    super.awakeFromNib()
    addTarget(self, action: #selector(buttonClicked(sender:)), for: UIControl.Event.touchUpInside)
    isOn = false
}

@objc func buttonClicked(sender: UIButton) {
    if sender == self {
        isOn = !isOn
        setNeedsDisplay()
    }
}
}

1

मैं एक सुपर सरल वर्ग बना रहा हूं इसे संभालने के लिए एक मैक एप्लिकेशन में मैं काम कर रहा हूं। उम्मीद है, यह किसी के लिए उपयोगी है

RadioButtonController क्लास:

class RadioButtonController: NSObject {

var buttonArray : [NSButton] = []
var currentleySelectedButton : NSButton?
var defaultButton : NSButton = NSButton() {
    didSet {
        buttonArrayUpdated(buttonSelected: self.defaultButton)
    }
}

func buttonArrayUpdated(buttonSelected : NSButton) {
    for button in buttonArray {
        if button == buttonSelected {
            currentleySelectedButton = button
            button.state = .on
        } else {
            button.state = .off
        }
    }
}

}

दृश्य नियंत्रक में कार्यान्वयन:

class OnboardingDefaultLaunchConfiguration: NSViewController {

let radioButtonController : RadioButtonController = RadioButtonController()
@IBOutlet weak var firstRadioButton: NSButton!
@IBOutlet weak var secondRadioButton: NSButton!

@IBAction func folderRadioButtonSelected(_ sender: Any) {
    radioButtonController.buttonArrayUpdated(buttonSelected: folderGroupRadioButton)
}

@IBAction func fileListRadioButtonSelected(_ sender: Any) {
    radioButtonController.buttonArrayUpdated(buttonSelected: fileListRadioButton)
}

override func viewDidLoad() {
    super.viewDidLoad()
    radioButtonController.buttonArray = [firstRadioButton, secondRadioButton]
    radioButtonController.defaultButton = firstRadioButton
}

}

0
  1. 2 बटन एक "YES" और दूसरा "NO" के रूप में बनाएं।
  2. BOOL प्रॉपर्टी बनाएँ Ex: isNRICitizen = false
  3. दोनों बटनों को एक ही बटन कनेक्शन दें और एक टैग सेट करें (Ex: Yes बटन - टैग 10 और कोई बटन -tag 20)
@IBAction func btnAction(_ sender:UIButton) {

isNRICitizen = sender.tag == 10 ? true : false
isNRICitizen ? self.nriCitizenBtnYes.setImage(#imageLiteral(resourceName: "radioChecked"), for: .normal) : self.nriCitizenBtnYes.setImage(#imageLiteral(resourceName: "radioUnchecked"), for: .normal)
        isNRICitizen ? self.nriCitizenBtnNo.setImage(#imageLiteral(resourceName: "radioUnchecked"), for: .normal) : self.nriCitizenBtnNo.setImage(#imageLiteral(resourceName: "radioChecked"), for: .normal)
}

0

चेकबॉक्स के लिए वास्तव में UITableViewCell सामान के रूप में एक अंतर्निहित समाधान है। आप अपना फॉर्म यूआईटेबल व्यू के रूप में सेट कर सकते हैं जिसमें प्रत्येक सेल एक चयन विकल्प के रूप में और accessoryTypeचयनित वस्तुओं के लिए एक चेक मार्क सेट करने के लिए उपयोग करता है।

यहाँ एक छद्म कोड उदाहरण है:

    let items = [SelectableItem]

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        // Get the item for the current row
        let item = self.items[indexPath.row]

        // ...dequeue and set up the `cell` as you wish...

        // Use accessoryType property to mark the row as checked or not...
        cell.accessoryType = item.selected ? .checkmark : .none
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        // Unselect row
        tableView.deselectRow(at: indexPath, animated: false)

        // Toggle selection
        let item = self.items[indexPath.row]
        item.selected = !item.selected
        tableView.reloadData()
    }

रेडियो बटन को हालांकि एक कस्टम कार्यान्वयन की आवश्यकता होती है, अन्य उत्तर देखें।


0

चेकबॉक्स बटन को चेक या अनचेक करने का निर्णय दृश्य के दायरे से बाहर है। अपने आप को केवल तत्वों को खींचने का ध्यान रखना चाहिए, उस की आंतरिक स्थिति के बारे में निर्णय नहीं लेना चाहिए। मेरा सुझाया गया कार्यान्वयन इस प्रकार है:

import UIKit

class Checkbox: UIButton {

    let checkedImage = UIImage(named: "checked")
    let uncheckedImage = UIImage(named: "uncheked")
    var action: ((Bool) -> Void)? = nil

    private(set) var isChecked: Bool = false {
        didSet{
            self.setImage(
                self.isChecked ? self.checkedImage : self.uncheckedImage,
                for: .normal
            )
        }
    }

    override func awakeFromNib() {
        self.addTarget(
            self,
            action:#selector(buttonClicked(sender:)),
            for: .touchUpInside
        )
        self.isChecked = false
    }

    @objc func buttonClicked(sender: UIButton) {
        if sender == self {
            self.action?(!self.isChecked)
        }
    }

    func update(checked: Bool) {
        self.isChecked = checked
    }
}

इसका उपयोग इंटरफ़ेस बिल्डर या प्रोग्रामेटिक रूप से किया जा सकता है। दृश्य का उपयोग निम्न उदाहरण के रूप में हो सकता है:

let checkbox_field = Checkbox(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
checkbox_field.action = { [weak checkbox_field] checked in
    // any further checks and business logic could be done here
    checkbox_field?.update(checked: checked)
}

0

स्विफ्ट 5.0 अद्यतित सरल रेडियोबटन स्विफ्ट के लिए (कोई पुस्तकालय नहीं)

पहले सेट छवियों के लिए एक जाँच और दूसरा अनियंत्रित बटन।

इसके बाद RadioButton के 2 आउटलेट प्रदान करें।

@IBOutlet weak var radioMale: UIButton!
@IBOutlet weak var radioFemale: UIButton!

एक विधि में दोनों बटन कार्रवाई के साथ आईबीएक्शन बनाएं।

 @IBAction func btnRadioTapped(_ sender: UIButton) {

    radioMale.setImage(UIImage(named: "Unchecked"), for: .normal)
    radioFemale.setImage(UIImage(named: "Unchecked"), for: .normal)

    if sender.currentImage == UIImage(named: "Unchecked"){

        sender.setImage(UIImage(named: "Checked"), for: .normal)

    }else{

        sender.setImage(UIImage(named: "Unchecked"), for: .normal)
    }

}

0

मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, इसलिए मैं यहां सलिल दुहान के संस्करण को छोड़ दूंगा । स्विफ्ट 5, एक्सकोड 11.3 के लिए काम करता है।

पहले आईबी पर अपना बटन रखें, "कस्टम" टाइप करें और सहायक लेआउट ( Ctrl+ ड्रैग) के साथ एक आउटलेट और एक एक्शन बनाएं । निम्नलिखित कोड शामिल करें और इसे इस तरह समाप्त होना चाहिए:

class YourViewController: UIViewController {
    @IBOutlet weak var checkbox: UIButton!
    @IBAction func checkboxTapped(_ sender: UIButton) {
        checkbox.isSelected = !checkbox.isSelected
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        checkbox.setImage(UIImage.init(named: "checkMark"), for: .selected)
    }
}

एसेट्स में छवि जोड़ना और मिलान करने के लिए नाम बदलना न भूलें!

checkbox.isSelected जांचने का तरीका है


0

हालाँकि कुछ उत्तरों में यह उल्लेख सही है कि हम चयनित राज्य का उपयोग बटन की चयनित स्थिति के लिए एक छवि सेट करने के लिए कर सकते हैं, यह तब सुरुचिपूर्ण ढंग से काम नहीं करेगा जब बटन में छवि और पाठ दोनों हों।

कई की तरह, मैं यूबूटन को उपवर्ग द्वारा समाप्त कर दिया; हालाँकि, इंटरफ़ेस बिल्डर से चित्र स्थापित करने के लिए समर्थन जोड़ा गया है।

नीचे मेरा कोड है:

import UIKit

class CustomCheckbox: UIButton {

    @IBInspectable var defaultStateImage: UIImage? = nil {
        didSet{
            self.setNeedsDisplay()
        }
    }

    @IBInspectable var selectedStateImage: UIImage? = nil {
        didSet{
            self.setNeedsDisplay()
        }
    }

    @IBInspectable var gapPadding: CGFloat = 0 {
        didSet{
            self.setNeedsDisplay()
        }
    }

    @IBInspectable var isChecked: Bool = false {
        didSet{
            self.setNeedsDisplay()
        }
    }

    var defaultImageView: UIImageView? = nil
    var selectedImageView: UIImageView? = nil

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        setup()
    }

    func setup() {
        if(defaultStateImage != nil) {
            defaultImageView = UIImageView(image: defaultStateImage)
            defaultImageView?.translatesAutoresizingMaskIntoConstraints = false

            addSubview(defaultImageView!)

            let length = CGFloat(16)
            titleEdgeInsets.left += length

            NSLayoutConstraint.activate([
                defaultImageView!.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: -gapPadding),
                defaultImageView!.centerYAnchor.constraint(equalTo: self.titleLabel!.centerYAnchor, constant: 0),
                defaultImageView!.widthAnchor.constraint(equalToConstant: length),
                defaultImageView!.heightAnchor.constraint(equalToConstant: length)
            ])
        }

        if(selectedStateImage != nil) {
            selectedImageView = UIImageView(image: selectedStateImage)
            selectedImageView!.translatesAutoresizingMaskIntoConstraints = false

            addSubview(selectedImageView!)

            let length = CGFloat(16)
            titleEdgeInsets.left += length

            NSLayoutConstraint.activate([
                selectedImageView!.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: -gapPadding),
                selectedImageView!.centerYAnchor.constraint(equalTo: self.titleLabel!.centerYAnchor, constant: 0),
                selectedImageView!.widthAnchor.constraint(equalToConstant: length),
                selectedImageView!.heightAnchor.constraint(equalToConstant: length)
            ])
        }

        if defaultImageView != nil {
            defaultImageView!.isHidden = isChecked
        }

        if selectedImageView != nil  {
            selectedImageView!.isHidden = !isChecked
        }

        self.addTarget(self, action: #selector(checkChanged(_:)), for: .touchUpInside)
    }

    @objc func checkChanged(_ btn : UIButton){
        self.isChecked = !self.isChecked

        if defaultImageView != nil {
            defaultImageView!.isHidden = isChecked
        }

        if selectedImageView != nil  {
            selectedImageView!.isHidden = !isChecked
        }
    }
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.