从多个单元格进行隔离无法正常工作

时间:2019-10-03 10:20:19

标签: ios swift

我有一个tableView,用户可以输入和删除其中的单元格。单击这些单元格之一,即可将用户带到与该单元格关联的视图。但是,当删除单元格并且所有行向上移动一位时,视图控制器不会移动。因此,假设您删除了第2行,那么第3行将移至第2行的位置,并且具有与第2行相同的视图控制器,而不是原始的3视图。

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
        }
}

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

1 个答案:

答案 0 :(得分:0)

如果删除第2行的单元格,则第3行的单元格现在是第2行的单元格,因此当您选择它时,即为该行。

您不会在删除单元格的位置显示代码-在此,您还应该从模型中删除相应的项。在您的情况下,这很复杂,因为您要将字符串保存在以索引号为键的用户默认值中,因此要反映删除,您需要将其他所有项都移动到默认值以反映新索引。

如果ViewController拥有用作数据模型的字符串数组,则维护起来会更容易。删除单元格时,将从阵列中删除相关项。执行segue时,会将适当的元素从数组传递到FavouritesViewController

我很想看看其余的代码-您如何填充单元格?删除行时单元格值会怎样?