如何通过按添加按钮添加新单元格并将文本保存到 Coredata

Posted

技术标签:

【中文标题】如何通过按添加按钮添加新单元格并将文本保存到 Coredata【英文标题】:How to add a new cell by press a Add button and save the text into Coredata 【发布时间】:2017-04-12 02:52:28 【问题描述】:

我有一个带有 tableview 的 ViewController 和一个单独的 nib 用于创建 table view 单元格,该单元格包含一个 textview。 按添加按钮,然后表格视图将创建一个新单元格,因此我可以将文本输入到 textView 中。 无论存在多少个单元格,我都想每次都将单元格插入第一行。 最后,按完成按钮将文本保存到 coredata。

xib实体名称为“Checklist”,xib文件名称为“ChecklistCell”

class ChecklistViewController: 

    class ChecklistViewController: UIViewController,UITableViewDelegate,UITableViewDataSource 

    var items = [Checklist]()

    var cellTextView:ChecklistCell!

    @IBOutlet weak var tableView: UITableView!

    @IBOutlet var toolBar: UIToolbar!

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    struct TableViewCellIdentifiers
        static let checklistCell = "ChecklistCell"
    

    @IBAction func addItem()

       //i don't know how to write this code

    

    @IBAction func toolBarDoneButton(_ sender: UIBarButtonItem) 
        //write data to coredata
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        let item = Checklist(context: context)

        item.textView = cellTextView.textView.text

        (UIApplication.shared.delegate as! AppDelegate).saveContext()


    
    override func viewDidLoad() 
        super.viewDidLoad()

        let cellNib = UINib(nibName: "ChecklistCell", bundle: nil)
        tableView.register(cellNib, forCellReuseIdentifier: "ChecklistCell")
    

    override func viewWillAppear(_ animated: Bool) 
        getData()
        tableView.reloadData()
    

    func getData()
        do 
            items = try context.fetch(Checklist.fetchRequest())
         catch 
            print("Fetching Failed")
        
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return items.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCellIdentifiers.checklistCell, for: indexPath) as! ChecklistCell

        let item = items[indexPath.row]

        if let myItem = item.textView 
            cell.textView.text = myItem
        

        cell.textView.inputAccessoryView = toolBar

        return cell

    




【问题讨论】:

【参考方案1】:

items = [Checklist()] + items 将在您的 items 数组的开头(索引 [0])添加一个新的 Checklist 对象。如果您为 Checklist 类使用自定义 init 方法,您还需要在此处填写这些初始化参数,例如 Checklist(/*init params here*/)

要在更改数据源后为用户更新 tableView,可以使用以下答案:How to insert new cell into UITableView in Swift,我已将其包含在以下代码中。

对于 Swift 3.0,您的 addItem() 函数可能如下所示:

func addItem() 

    items = [Checklist()] + items //adds Checklist item at beginning of array

    tableView.beginUpdates()
    tableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic) //row param is 0 for first row
    tableView.endUpdates()

希望对您有所帮助。

【讨论】:

以上是关于如何通过按添加按钮添加新单元格并将文本保存到 Coredata的主要内容,如果未能解决你的问题,请参考以下文章

Excel:从1个单元格复制文本并将其添加到旁边单元格的顶部

如何从一个模态视图控制器添加新的表格单元格数据?

如何使用文本字段和按钮将文本添加到每个单元格中?

Swift 将按钮操作添加到 TableView 单元格

如何向 UICollectionView 动态添加新单元格?

如果已将一个文本字段添加到单元格,如何不创建新文本字段