2016-12-07 105 views
1

我有3個按鈕代表城市,我已經通過Attribute Inspectortags分配給他們,如下所示,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!] 
} 

我在類型的核心數據具有屬性citySelectedTransformable

當我保存數據空數組,它只記得在控制檯上選擇和輸出的最後一個城市是

Record Saved Successfully 
citySelected = "(\n 2\n)"; 

但它應該是這樣的下面,因爲我選擇的所有城市

Record Saved Successfully 
citySelected = "(\n 0\n 1\n 2\n)"; 

我缺少什麼?

+0

我認爲你錯..乾杯打消了我接受的答案! :) –

+0

對不起,我這樣做是因爲你的答案是在做工作,但是當我選擇和取消選擇城市時,它仍然記得我取消選擇的城市。所以我想保持開放的問題 – leaner122

+0

已經更新了我的答案:) –

回答

2

它像你每次都要重新初始化數組。相反追加或刪除新元素是這樣的:

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

欣賞它,完美的作品。 – leaner122

+1

樂於助人。乾杯! :) –

1

你應該追加到數組

cityTag += [sender.tag!] 
2

你不應該使用 cityTag = [sender.tag!] 必須使用 cityTag.append(sender.tag!)

0

嘗試使用設置,而不是數組,如:

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

    } 
+0

這完成了什麼? – leaner122

+0

您可以唯一保存您的標記,並在您再次點擊該按鈕後將其刪除,保存所有選定城市的狀態。你所做的就是每次點擊一次就爲它分配一個元素,這就是爲什麼你只有最後一個元素 –

+0

這是一個完美的解決方案,但我得到一個錯誤:「無法將[Any]類型的值轉換爲Set」因爲我的Xcode正在崩潰。 – leaner122

1

在你cityButtonPressed方法,你是按鈕的標籤值分配給array。這覆蓋了最後一個數組賦值。這意味着你第一次說cityTag = 1,但只要你按第二個按鈕你的cityTag = 2。爲避免這種情況,您必須將所有標籤附加到cityTag陣列中以收集所有標籤。

要追加他們使用這行代碼:

cityTag.append(sender.tag!) 

我希望這爲您提供有關問題的清晰的思路。

+1

這很清楚,但它應該像cityTag.append(sender.tag!)。謝謝 – leaner122

+1

感謝指出它。我會更新我的答案。 –

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!) 
} 
相關問題