36 Stimmen

Kontrollkästchen in iOS-Anwendung

Ich muss Kontrollkästchen Steuerelemente zu meinem Formular hinzufügen. Ich weiß, dass es kein solches Steuerelement in iOS SDK gibt. Wie könnte ich das tun?

1voto

hasan Punkte 22989

Unterklasse UIButton, legen Sie eine Schaltfläche im View-Controller ab, wählen Sie sie aus und ändern Sie den Klassennamen in CheckBox im Identitätsinspektor.

#import "CheckBox.h"

@implementation CheckBox

#define checked_icon @"checked_box_icon.png"
#define empty_icon @"empty_box_icon.png"

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
        [self setImage:[UIImage imageNamed:empty_icon] forState:UIControlStateNormal];
        [self addTarget:self action:@selector(didTouchButton) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}

- (void)didTouchButton {
    selected = !selected;
    if (selected)
        [self setImage:[UIImage imageNamed:checked_icon] forState:UIControlStateNormal];
    else
        [self setImage:[UIImage imageNamed:empty_icon] forState:UIControlStateNormal];
}

@end

1voto

Zhengqian Kuang Punkte 869

Ich habe kürzlich eine gemacht. Frei zu erwerben von GitHub. Sehen Sie, ob este wird helfen. Die Wirkung ist wie

enter image description here

1voto

Cheok Yan Cheng Punkte 47669

Eine einfache UIButton Unterklasse kann sich wie ein Kontrollkästchen in Android verhalten.

import UIKit

class CheckedUIButton: UIButton {
    var checked: Bool = false {
        didSet {
            if checked {
                setImage(UIImage(systemName: "checkmark.circle"), for: .normal)
            } else {
                setImage(UIImage(systemName: "circle"), for: .normal)
            }
        }
    }

    //initWithFrame to init view from code
    override init(frame: CGRect) {
        super.init(frame: frame)

        commonInit()
    }

    //initWithCode to init view from xib or storyboard
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        commonInit()
    }

    private func commonInit() {
        addTarget(self, action: #selector(self.checkedTapped), for: .touchUpInside)
    }

    @objc
    private func checkedTapped() {
        self.checked.toggle()
    }
}

Ausgabe

enter image description here

(Ungeprüfter Zustand)


enter image description here

(Kontrollierter Zustand)

0voto

Nostradamus Punkte 1397

Benutzer Aruna Lakmal; FYI, wenn Sie diesen Code zu IB hinzufügen, wie Sie beschreiben, wird initWithFrame nicht aufgerufen, initWithCoder schon. Implementieren Sie initWithCoder und es wird so funktionieren, wie Sie es beschreiben.

0voto

Kaunteya Punkte 2757

Eine einfache UIButton-Unterklasse mit SF-Symbolen erfüllt diesen Zweck

class CheckBoxButton: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setup()
    }

    func setup() {
        setImage(UIImage(systemName: "square.fill"), for: .normal)
        setImage(UIImage(systemName: "checkmark.square.fill"), for: .selected)
    }
}

Storyboard

Wenn Sie Storyboard verwenden, stellen Sie sicher, dass der Schaltflächentyp auf custom wie auf dem folgenden Bild zu sehen

button type custom


Verwendung

Alles, was Sie tun müssen, ist das Umschalten der isSelected Variable in Action/Selector-Methode

@objc func toggle(_ sender: UIButton) {
    sender.isSelected.toggle()
}

Demo

checkbox demo

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X