我已经为我的detailViews制作了一个最喜欢的按钮(我有一个主 - 详细应用程序)并且它通常为所有单元格/ DetailsViews保存按钮状态...我想如果按下索引的3单元格它将保存按钮状态只有那里,如果我转到索引4,它将单独保存到该行,并不会将相同的状态保存到所有单元格。
//create a new button
let Favoritebutton: UIButton = UIButton(type: UIButtonType.custom)
//set image for button
Favoritebutton.setImage(UIImage(named: "EmptyHeart.png"), for: .normal)
Favoritebutton.setImage(UIImage(named: "FilledHeart.png"), for: .selected)
//add function for button
Favoritebutton.addTarget(self, action: #selector(self.button), for: .touchUpInside)
//set frame
Favoritebutton.frame = CGRect(x:0,y: 0,width: 35,height: 35)
Favoritebutton.isSelected = UserDefaults.standard.bool(forKey: "isSaved")
let barButton = UIBarButtonItem(customView: Favoritebutton)
//assign button to navigationbar
self.navigationItem.rightBarButtonItem = barButton
func button(sender: UIButton) {
audioPlayer.play()
let newValue = !sender.isSelected
sender.isSelected = newValue
UserDefaults.standard.set(newValue, forKey: "isSaved")
let tabItem = self.tabBarController?.tabBar.items![3]
sel_val = tabItem?.badgeValue
if(sel_val == nil){
sel_val = "0"
}
let sel_num = Int(sel_val!)
let fav: NSMutableArray = []
fav.add(barImage)
fav.add(barName)
fav.add(streetName)
if sender.isSelected {
tabItem!.badgeValue = String(format: "%d", sel_num! + 1)
favorite.add(fav)
} else {
tabItem!.badgeValue = String(format: "%d", sel_num! - 1)
favorite.remove(fav)
}
}
如何像我想要的那样单独为每个indexPath设置按钮保存状态?
这将帮助我完成我的收藏夹功能,因此您的帮助将非常受欢迎!
感谢您的帮助!
答案 0 :(得分:0)
你想要的是存储数组或字典,取决于具体情况。以下是如何存储数组How to save NSMutablearray in NSUserDefaults的示例。我建议在应用程序启动时从默认值中获取值并将其分配给值,因此您有一个本地副本。每次更改后,或者至少在离开应用程序时,不要忘记将数组保存回默认值。
编辑:
您希望存储bool的Dictionary,以便您可以访问每一行的值。我不鼓励你使用indexPath,而应该使用一个对于行唯一的标识符。
这些将用作您应用的本地存储空间
let favoritesKey = "favorites"
var favorites: [Int: Bool] = [:]
这是您获取已保存词典的方式:
favorites = userDefaults.object(forKey: favoritesKey) as? [Int : Bool] ?? [:]
这是您更改价值的方式:
favorites[index] = true / false
这是您获取价值的方式:
let value = favorites[index]
这就是你保存价值的方式:
let userDefaults = UserDefaults.standard
userDefaults.set(favorites, forKey: favoritesKey)