我在viewDidLoad中使用setPage()函数填充tableview(取决于在上一个tableview上点击了哪个单元格)
func setPage() {
let pageTitle = self.navigationItem.title
let userDefaults = UserDefaults.standard
let productData = userDefaults.object(forKey: "products") as? [String]
let productImageData = userDefaults.object(forKey: "productImages") as? [String]
ProductController.products = productData!
ProductController.productImages = productImageData!
switch pageTitle! {
case "Apple":
ProductController.products = appleProducts
ProductController.productImages = appleImages
case "Google":
ProductController.products = googleProducts
ProductController.productImages = googleImages
case "Twitter":
ProductController.products = twitterProducts
ProductController.productImages = twitterImages
case "Tesla":
ProductController.products = teslaProducts
ProductController.productImages = teslaImages
default:
ProductController.products = samsungProducts
ProductController.productImages = samsungImages
}
tableView.reloadData()
}
和cellForRowAt indexPath
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! ProductCell
cell.textLabel?.text = ProductController.products[indexPath.row]
DispatchQueue.main.async {
cell.productLogoView.image = UIImage(named: ProductController.productImages[indexPath.row])!
}
return cell
}
这是我处理删除单元格的地方
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
{
return true
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
{
if editingStyle == .delete
{
tableView.beginUpdates()
ProductController.products.remove(at: indexPath.row)
ProductController.productImages.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
let userDefaults = UserDefaults.standard
userDefaults.set(ProductController.products, forKey: "products")
userDefaults.set(ProductController.productImages, forKey: "productImages")
tableView.endUpdates()
}
}
如果我离开页面然后返回,则删除的单元格再次出现。我意识到这是因为我在viewDidLoad中填充了tableView,我认为使用UserDefaults是解决这个问题的方法,但我不确定如何在这种情况下实现它。我已经阅读了文档并四处寻找解决方案,但在这个特定的用例中我找不到任何可以帮助我的东西。
在重新启动应用程序之前,如何让已删除的单元格保持删除状态?
初始化数组 - 我有空数组的产品和productImages,因此setPage()检查标题,然后使用相应公司的产品和产品图像填充空数组。
static var products = [String]()
var appleProducts = ["iPad", "iPod", "iPhone"]
var googleProducts = ["Search", "Firebase", "Pixel"]
var twitterProducts = ["Twitter", "Periscope", "Vine"]
var teslaProducts = ["Tesla Model S", "Tesla Model X", "Tesla Powerwall"]
var samsungProducts = ["Samsung Galaxy", "Samsung Note", "Samsung Tab"]
static var productImages = [String]()
var appleImages = ["iPad", "iPod", "iPhone"]
var googleImages = ["GoogleLogo", "Firebase", "Pixel"]
var twitterImages = ["TwitterLogo", "Periscope", "Vine"]
var teslaImages = ["TeslaS", "TeslaX", "TeslaPowerwall"]
var samsungImages = ["SamsungGalaxy", "SamsungNote", "SamsungTab"]
答案 0 :(得分:1)
UserDefaults
只是一堆键和值。因此,您可以为每个产品分配一个布尔值("隐藏"):
// get the current product - this depends on how your table is set up
let product = products[indexPath.row]
// set the boolean to true for this product
UserDefaults.set(true, forKey: product)
然后,无论您在何处初始化产品,请添加:
// only include elements that should not be hidden
products = products.filter({ UserDefaults.boolForKey($0) == false })
您还可以存储所有