我想知道如何快速创建一个收藏按钮,当按下该按钮时,“收藏”的对象将成为 tableview 的一部分并保持这种状态。我听说核心数据是一种方法,但我仍然在努力让按钮在按下时发生变化。
当我创建一个按钮时,我得到的只是一个仅在第一次按下时更改的按钮。一个例子是我有一个空的星形按钮,这意味着它不是收藏夹,当我按下它时它会变成一个填充的心形,这意味着它是收藏夹。当我第二次按下按钮时,当它当前是一颗实心星时,它不会改变,仍然是一颗实心星。
我遇到的另一个问题是将信息从对象发送到最喜欢的表格视图。只要最喜欢的按钮切换为填充星,我就不确定如何在表格视图中保留一些东西。
我经常看到的是这个主题,但它都是关于在表格视图中制作一个最喜欢的按钮。我不是在寻找表格视图。我正在尝试做的一个例子就像一个最喜欢的图书应用程序。该应用程序以一个装满书籍的 tableview 形式打开,当按下一个单元格时,它会打开一个包含该书籍信息的新视图控制器,顶部是一个收藏按钮,通常是一个空星。如果我喜欢那本书,我想按下那个按钮,空的星号变成一个实心的星号按钮,表示我喜欢它。这本书的信息然后被发送到一个新的表格视图,其中包含我以前做过的所有喜欢的书。如果我不再喜欢那本书,我想再次按下填充的星形按钮,它会从最喜欢的 tableview 列表中删除。
我对 mysql 有一些关于 swift 的经验,而且我知道有人对使用某种持久性来保存按钮的状态发表了评论。
我最大的问题是我什至不知道从哪里开始。我所做的每一次尝试似乎都以同样的方式结束,所以我真的没有任何源代码供其他人查看。我在网上和 github 上查看过,但我能找到的最接近的东西是一个名为 DoButton 的 cocoapod,但它已经很长时间没有更新了,我担心它不会随着另一个快速更新而持续下去。如果有人能引导我走上正确的道路或知道一个好的教程,我将不胜感激。如果有任何问题我可以回答,我会尽我所能回答。
另一个更新:我设法让按钮工作。它连接到核心数据并保存按钮的状态,即使它退出也是如此。现在剩下的就是创建一个收藏夹 tableView 来存储收藏夹。这是代码:
class ViewController: UIViewController {
var buttonIsSelected = false
var favorites = [Favorite]()
@IBOutlet var onOffButton: UIButton!
let image1 = UIImage(named: "empty") as UIImage?
let image2 = UIImage(named: "filled") as UIImage?
override func viewDidLoad() {
super.viewDidLoad()
print("buttonIsSelected: \(buttonIsSelected)")
let fetchedRequest: NSFetchRequest<Favorite> = Favorite.fetchRequest()
do {
let favorite = try PersistenceService.context.fetch(fetchedRequest)
for fav in favorite {
resetAllRecord(entity: fav.favorite)
buttonIsSelected = fav.favorite
print("fav.favorite: \(fav.favorite)")
print("button: \(buttonIsSelected)")
if fav.favorite == true {
onOffButton.setImage(image2, for: .normal)
}
}
} catch {
}
}
//button Action
@IBAction func onOffButtonPressed(_ sender: Any) {
buttonIsSelected = !buttonIsSelected
if buttonIsSelected == true {
onOffButton.setImage(image2, for: .normal)
} else if buttonIsSelected == false {
onOffButton.setImage(image1, for: .normal)
}
saveBool(bool: buttonIsSelected)
}
//save to core data
func saveBool(bool: Bool) {
if bool == true {
print("favorite")
print("buttonIsSelected \(buttonIsSelected)")
let liked = Favorite(context: PersistenceService.context)
liked.favorite = bool
PersistenceService.saveContext()
favorites.append(liked)
} else if bool == false {
print("unfavorite")
print("buttonIsSelected \(buttonIsSelected)")
let liked = Favorite(context: PersistenceService.context)
liked.favorite = bool
PersistenceService.saveContext()
favorites.append(liked)
}
}
//clears core data so it doens't get full
func resetAllRecord(entity: Bool) {
let context = PersistenceService.persistentContainer.viewContext
let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Favorite")
let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch)
do
{
try context.execute(deleteRequest)
try context.save()
}
catch
{
print ("There was an error")
}
}
}