如何保存多个按钮选择?
我有3个按钮代表城市,我已经通过Attribute Inspector
将tags
分配给他们,如下所示,CityA as 0, CityB as 1, CityC as 2
。如何保存多个按钮选择?
我有标签
var cityTag: [Int] = []
在IBAction为方法
然后
@IBAction func cityButtonPressed(_ sender: AnyObject) {
guard let button = sender as? UIButton else { return }
cityTag = [sender.tag!]
}
我在类型的核心数据具有属性citySelected
Transformable
当我保存数据空数组,它只记得在控制台上选择和输出的最后一个城市是
Record Saved Successfully
citySelected = "(\n 2\n)";
但它应该是这样的下面,因为我选择的所有城市
Record Saved Successfully
citySelected = "(\n 0\n 1\n 2\n)";
我缺少什么?
它像你每次都要重新初始化数组。相反追加或删除新元素是这样的:
if(cityTag.contains(sender.tag!)) {
if let index = cityTag.index(of: sender.tag!) {
cityTag.remove(at: index)
}
} else {
cityTag.append(sender.tag!)
}
欣赏它,完美的作品。 – leaner122
乐于助人。干杯! :) –
你应该追加到数组
cityTag += [sender.tag!]
你不应该使用 cityTag = [sender.tag!] 必须使用 cityTag.append(sender.tag!)
尝试使用设置,而不是数组,如:
var cityTag: Set = []
@IBAction func cityButtonPressed(_ sender: AnyObject) {
guard let button = sender as? UIButton else { return }
if cityTag.contains(sender.tag) == false {
cityTag.insert(sender.tag)
}else{
cityTag.remove(sender.tag)
}
}
在你cityButtonPressed
方法,你是按钮的标签值分配给array
。这覆盖了最后一个数组赋值。这意味着你第一次说cityTag = 1
,但只要你按第二个按钮你的cityTag = 2
。为避免这种情况,您必须将所有标签附加到cityTag
阵列中以收集所有标签。
要追加他们使用这行代码:
cityTag.append(sender.tag!)
我希望这为您提供有关问题的清晰的思路。
这很清楚,但它应该像cityTag.append(sender.tag!)。谢谢 – leaner122
感谢指出它。我会更新我的答案。 –
我想你还需要检查:
if cityTag.contains(sender.tag!) {
//You can remove the unselected city tag from cityTag array
print(“already exists“)
}
else{
//Here you add selected city tag to cityTag array
cityTag.append(sender.tag!)
}
我认为你错..干杯打消了我接受的答案! :) –
对不起,我这样做是因为你的答案是在做工作,但是当我选择和取消选择城市时,它仍然记得我取消选择的城市。所以我想保持开放的问题 – leaner122
已经更新了我的答案:) –