Ios 如何保存多个按钮选择?
我有3个代表城市的按钮,我通过Ios 如何保存多个按钮选择?,ios,swift,Ios,Swift,我有3个代表城市的按钮,我通过属性检查器为它们分配了标记,如下所示,CityA为0,CityB为1,CityC为2 我有一个空的标签数组 var cityTag: [Int] = [] 然后在IBAction方法中 @IBAction func cityButtonPressed(_ sender: AnyObject) { guard let button = sender as? UIButton else { return } cityTag = [sender.tag!
属性检查器为它们分配了标记,如下所示,CityA为0,CityB为1,CityC为2
我有一个空的标签数组
var cityTag: [Int] = []
然后在IBAction方法中
@IBAction func cityButtonPressed(_ sender: AnyObject) {
guard let button = sender as? UIButton else { return }
cityTag = [sender.tag!]
}
我在类型为可转换的核心数据中有一个属性citySelected
当我保存数据时,它只记住最后选择的城市,控制台上的输出是
Record Saved Successfully
citySelected = "(\n 2\n)";
但是下面应该是这样的,因为我选择了所有的城市
Record Saved Successfully
citySelected = "(\n 0\n 1\n 2\n)";
我缺少什么?您应该附加到数组中
cityTag += [sender.tag!]
您应该附加到数组中
cityTag += [sender.tag!]
你不应该使用
cityTag=[sender.tag!]
你必须使用
cityTag.append(sender.tag!)您不应该使用
cityTag=[sender.tag!]
你必须使用
cityTag.append(sender.tag!)好像每次都在重新初始化数组。而是像这样附加或删除新元素:
if(cityTag.contains(sender.tag!)) {
if let index = cityTag.index(of: sender.tag!) {
cityTag.remove(at: index)
}
} else {
cityTag.append(sender.tag!)
}
好像每次都在重新初始化数组。而是像这样附加或删除新元素:
if(cityTag.contains(sender.tag!)) {
if let index = cityTag.index(of: sender.tag!) {
cityTag.remove(at: index)
}
} else {
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)
}
}
尝试使用集合而不是数组,如:
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
方法中,将按钮的标记值分配给数组
。这将覆盖最后一个数组分配。这意味着你第一次说cityTag=1
,但一旦按下第二个按钮,你的cityTag=2
。为了避免这种情况,您必须通过将所有标记添加到cityTag
数组中来收集它们
要附加它们,请使用以下代码行:
cityTag.append(sender.tag!)
我希望这能让您清楚地了解您的问题。在您的cityButtonPressed
方法中,您将按钮的标记值分配给数组。这将覆盖最后一个数组分配。这意味着你第一次说cityTag=1
,但一旦按下第二个按钮,你的cityTag=2
。为了避免这种情况,您必须通过将所有标记添加到cityTag
数组中来收集它们
要附加它们,请使用以下代码行:
cityTag.append(sender.tag!)
我希望这能让你清楚地了解你的问题。我想你也需要检查一下:
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!)
}
我想你也需要检查一下:
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!)
}
这有什么作用?您可以唯一地保存标签,并在再次单击按钮后删除保存所有选定城市状态的内容。您所做的是在每次单击时为一个新数组分配一个元素,这就是为什么您只有最后一个元素。这是一个完美的解决方案,但我收到一个错误,提示“无法将[Any]类型的值转换为Set”以及我的Xcode正在崩溃。这有什么作用呢?您可以唯一地保存标签,并在再次单击按钮时删除,这将保存所有选定城市的状态。您所做的是在每次单击时为一个新数组分配一个元素,这就是为什么您只有最后一个元素。这是一个完美的解决方案,但我收到一个错误,说“无法将[Any]类型的值转换为Set”,并且我的Xcode正在崩溃。这非常清楚,但应该类似于cityTag.append(sender.tag!).Thanks这很清楚,但应该像cityTag.append(sender.tag!)一样。Thanks我认为您错误地删除了我接受的答案。。干杯!:)很抱歉,我这样做是因为你的答案是“做工作”,但当我选择和取消选择城市时,它仍然记得我取消选择的城市。因此,我想保留这个问题,并为您更新了我的答案:)我认为您错误地删除了我接受的答案。。干杯!:)很抱歉,我这样做是因为你的答案是“做工作”,但当我选择和取消选择城市时,它仍然记得我取消选择的城市。因此,我想保留这个问题,并为您更新了我的答案:)很高兴为您提供帮助。干杯!:)很乐意帮忙。干杯!:)