Включение определенного UISwitch, но не все программно - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь создать несколько UIS-переключателей, но я пытаюсь включить только определенные переключатели. Я хочу включить только те переключатели, которые находятся в обоих массивах (weightUnits и allUnits). Кто-нибудь, кто знает, как я могу это сделать?

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

1 Ответ

0 голосов
/ 28 марта 2020

я нашел способ сделать это. У меня была ошибка: я не использовал isEqual, но я не сравнивал весь объект.

for usersUnit in usersUnits {
            if unitOption .isEqual(usersUnit){
                option.setOn(true, animated: false)
                break
            } else {
                option.setOn(false, animated: false)
            }
        }
...