打开某些 UISwitch 但不是全部以编程方式
Turning on certain UISwitch but not all programmatically
我正在尝试创建多个 UISwitch,但我试图只打开某些开关。
我只想打开两个数组(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)
}
}
我找到了一种方法来做到这一点。我犯的错误是我没有使用 isEqual 但是我没有比较整个对象。
for usersUnit in usersUnits {
if unitOption .isEqual(usersUnit){
option.setOn(true, animated: false)
break
} else {
option.setOn(false, animated: false)
}
}
我正在尝试创建多个 UISwitch,但我试图只打开某些开关。 我只想打开两个数组(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)
}
}
我找到了一种方法来做到这一点。我犯的错误是我没有使用 isEqual 但是我没有比较整个对象。
for usersUnit in usersUnits {
if unitOption .isEqual(usersUnit){
option.setOn(true, animated: false)
break
} else {
option.setOn(false, animated: false)
}
}