Saya mencoba membuat beberapa UISwitch tetapi saya hanya mencoba mengaktifkan sakelar tertentu. Saya hanya ingin menyalakan sakelar yang ada di kedua array (weightUnits dan allUnits). siapa pun, yang tahu bagaimana saya bisa melakukan ini?

let weightUnits = [ UnitMass.kilograms, UnitMass.stones, UnitMass.pounds, UnitMass.ounces ]
@objc func weightLong(_ sender: UIGestureRecognizer){
    if sender.state == .began{
        createOptionView(weightUnits)
    }
}
fileprivate func createOptionView(_ units: [UnitMass]) {
    for view in infoStack.subviews {
        //cleans the infoStack to make it ready for the new units.
        view.removeFromSuperview()
    }
    let allUnits = [ UnitMass.grams, UnitMass.kilograms, UnitMass.metricTons, UnitMass.stones, UnitMass.pounds, UnitMass.ounces ]
    for unit in allUnits {
        let prefix = unit
        let newOptionCard = UIStackView()
        newOptionCard.axis = .horizontal
        newOptionCard.alignment = .trailing
        newOptionCard.distribution = .fill
        let option = UISwitch()
        for usersUnit in units {
            if allUnits.contains(usersUnit){
                option.setOn(true, animated: false)
            }
        }
        newOptionCard.addArrangedSubview(option)
        let label = UILabel(frame: CGRect.zero)
        label.text = " " + prefix.symbol
        label.textColor = .white
        label.font = UIFont(name: "American Typewriter", size: 20)
        label.addConstraint(NSLayoutConstraint(item: label, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 60))
        newOptionCard.addArrangedSubview(label)
        infoStack.addArrangedSubview(newOptionCard)
    }
}

how it looks now

0
Petter Braka 28 Maret 2020, 18:09

1 menjawab

Jawaban Terbaik

Saya menemukan cara untuk melakukan ini. Kesalahan yang saya miliki adalah saya tidak menggunakan isEqual tetapi jadi saya tidak membandingkan seluruh objek.

for usersUnit in usersUnits {
            if unitOption .isEqual(usersUnit){
                option.setOn(true, animated: false)
                break
            } else {
                option.setOn(false, animated: false)
            }
        }
0
Petter Braka 28 Maret 2020, 15:26