2015-10-28 67 views
-1

我正在設置「添加到收藏夾」按鈕,這裏是我的位置。我已經添加了一個UIButton到我的表格視圖中,並且我想在點擊並更改圖片時將其設置爲true。然後,如果再次點擊它將設置相同的密鑰爲false,並將圖像更改回默認值。在Swift中創建「收藏夾」按鈕 - Xcode 6

這裏是我到目前爲止的代碼:

let isCouponFav = NSUserDefaults.standardUserDefaults().boolForKey("isCouponFav"); 

這個按鈕被設置爲「潤色內部」調用函數favButtonTapped()

@IBAction func favButtonTapped(sender: UIButton){ 
    if isCouponFav == true{ 
    NsUserDefaults.standardUserDefaults().setBool(false, forKey: "isCouponFav"); 
    NSUserDefaults.standardUserDefaults().synchronize(); 
    let image = UIImage(named: "Heart_icon.png") 
    sender.setImage(image, forState: UIControlState.Normal) 
    } 
    else{ 
    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isCouponFav"); 
    NSUserDefaults.standardUserDefaults().synchronize(); 
    let image = UIImage(named: "heart_icon_selected.png") 
    sender.setImage(image, forState: UIControlState.Normal) 
    } 
} 

至於現在 - 的心臟會改變點擊時會顯示「heart_icon_selected」,但在再次點擊時不會再變回「Heart_icon」。

回答

2

那是因爲你沒有改變的isCoupnFav值單擊該按鈕後,因此isCouponFav總是真/假,基於該行的初始值:

let isCouponFav = NSUserDefaults.standardUserDefaults().boolForKey("isCouponFav") 

您可以更改代碼以這樣的:(更新斯威夫特3語法)

// To make change to isCouponFav, you need to declare it as variable 
// not a constant 
var isCouponFav = UserDefaults.standard.bool(forKey: "isCouponFav") 
... 

@IBAction func favButtonTapped(sender: UIButton) { 
    if isCouponFav { 
     let image = UIImage(named: "Heart_icon.png") 
     sender.setImage(image, for: .normal) 
    } else { 
     let image = UIImage(named: "heart_icon_selected.png") 
     sender.setImage(image, for: .normal) 
    } 

    isCouponFav = !isCouponFav 
    UserDefaults.standard.set(isCouponFav, forKey: "isCouponFav") 
    UserDefaults.standard.synchronize() 
} 

而且,斯威夫特你不一行的末尾需要;

+0

我收到一條錯誤消息: –

+0

isCouponFav =!isCouponFav - 它告訴我「無法指定'isCouponFav'in'self' –

+0

哦,是的,因爲你讓它成爲一個常量。 – kientux