如何保存多个按钮选择?

时间:2016-12-07 11:09:45

标签: ios swift

我有3个代表城市的按钮,我已经通过tags分配了Attribute Inspector,如下所示,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)";

我错过了什么?

6 个答案:

答案 0 :(得分:2)

你不应该使用 cityTag = [sender.tag!] 你必须使用 cityTag.append(sender.tag!)

答案 1 :(得分:2)

就像你每次都重新初始化数组一样。而是添加或删除这样的新元素:

if(cityTag.contains(sender.tag!)) {
     if let index = cityTag.index(of: sender.tag!) {
         cityTag.remove(at: index)
     }
} else {
     cityTag.append(sender.tag!)
}

答案 2 :(得分:1)

你应该附加到数组

Worker

答案 3 :(得分:1)

cityButtonPressed方法中,您将按钮的标记值分配给array。这将覆盖最后一个数组赋值。这意味着您第一次说cityTag = 1,但只要按下第二个按钮cityTag = 2即可。为避免这种情况,您必须通过将所有标记附加到cityTag数组中来收集所有标记。

要附加它们,请使用以下代码:

cityTag.append(sender.tag!)

我希望这可以让你清楚地了解你的问题。

答案 4 :(得分:0)

尝试使用Set而不是Array,例如:

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)
     }

  }

答案 5 :(得分:0)

我想你还需要检查一下:

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!)
}