gpt4 book ai didi

ios - 从多个单元格中分离并没有按照应有的方式工作

转载 作者:行者123 更新时间:2023-11-29 05:25:34 25 4
gpt4 key购买 nike

我有一个 tableView,用户可以在其中输入和删除单元格。单击这些单元格之一,用户将进入与该单元格关联的 View 。但是,当删除一个单元格并且所有行都向上移动一位时, View Controller 不会移动。假设您删除了第 2 行,然后第 3 行向上移动到第 2 行的位置,并且具有与第 2 行相同的 View Controller ,而不是原始第 3 行的 View 。

import UIKit
import CoreData

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {

var selectedRow : Int = 0

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
selectedRow = indexPath.row
performSegue(withIdentifier: "ShowDetail", sender: self)

}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? FavouritesViewController {
destination.row = selectedRow

}
}
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {

if editingStyle == .delete {

//MARK:- remove cell core data
let appDelegate = UIApplication.shared.delegate as! AppDelegate // force unwrapping is perfectly fine

// 1
let managedContext = appDelegate.persistentContainer.viewContext
managedContext.delete(self.favourites[indexPath.row])
self.favourites.remove(at: indexPath.row)
self.tableView.reloadData()
let impactFeedbackgenerator = UIImpactFeedbackGenerator(style: .heavy)
impactFeedbackgenerator.prepare()
impactFeedbackgenerator.impactOccurred()
}
}

func insertNewCell() {
guard save(name: addNewMemory.text!) else { return }
let indexPath = IndexPath(row: favourites.count - 1, section: 0)
tableView.insertRows(at: [indexPath], with: .automatic)
addNewMemory.text = ""
view.endEditing(true)
}
import UIKit
import CoreData

class FavouritesViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UITextFieldDelegate, UITextViewDelegate {

var titleName: [NSManagedObject] = []
var titleString: String = ""
var row: Int!

@IBAction func doneButton(_ sender: UIButton) {
titleString = textField.text!
UserDefaults.standard.set(titleString, forKey: String(row))
print("Saved")
}
override func viewDidLoad() {
if UserDefaults.standard.object(forKey: String(row)) != nil {

textField.text = UserDefaults.standard.object(forKey: String(row)) as? String
}
}

我希望即使添加或删除另一个单元格,每个单元格的 View 也保持不变。

最佳答案

如果删除第 2 行的单元格,则第 3 行的单元格现在是第 2 行的单元格,因此当您选择它时,这就是您获得的行。

您不会显示删除单元格的代码 - 在其中,您还应该从模型中删除相应的项目。就您而言,这非常复杂,因为您将字符串保存在由索引号键入的用户默认值中,因此为了反射(reflect)删除,您需要移动默认值中的所有其他项目以反射(reflect)新索引。

如果 ViewController 包含一个字符串数组,并将其用作数据模型,那么维护起来会更容易。当您删除单元格时,您将从数组中删除相关项目。当您执行转场时,您将数组中的适当元素传递给 FavouritesViewController

我有兴趣查看您的其余代码 - 您如何填充单元格?删除行时单元格值会发生什么情况?

关于ios - 从多个单元格中分离并没有按照应有的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58217074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com