2015-10-28 3 views
-1

Я работаю над настройкой кнопки «Добавить в избранное», и вот где я. Я добавил UIButton в мой табличный вид, и я хочу установить ключ как истинный при нажатии и изменении изображения. Затем, если нажать снова, он установит ту же клавишу, что и false, и изменит изображение на значение по умолчанию.Создание кнопки «Избранное» в Swift - Xcode 6

Вот мой код до сих пор:

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

Кнопка устанавливается на "Touch Up Inside", чтобы вызвать функцию 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") 

Вы можете изменить код это: (Обновлено Swift 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() 
} 

И в Swift Вам не нужно ; в конце линии.

+0

Я получаю сообщение об ошибке: –

+0

isCouponFav =! IsCouponFav - это говорит мне: «Не могу назначить« isCouponFav »в« я » –

+0

о, да, потому что вы делаете его константой. Пожалуйста, прочитайте мой отредактированный ответ. – kientux

Смежные вопросы