如何获取编辑UITextView的单元格的行号?

时间:2018-12-26 21:39:40

标签: swift uitableview uitextview

  • 我在 UITableView
  • 的每个单元格中都有一个 UITextView
  • 我正在使用核心数据保存在UITextView中键入的数据
  • 我想在用户完成编辑后保存在UITextView中键入的文本
  • 我已将 UITextViewDelegate 添加到我的 TableViewCell
  • 我正在使用通知将新文本发布到 TableViewController
  

我能够将新文本获取到 TableViewController ,但是我不知道如何获取包含其中键入了文本的textview的单元格的行号。我需要知道行号(或该行中的对象)以更新正确的NSManagedObject。

我尝试过的事情:

  • 我当时正在考虑使用标签,但是由于我需要不断添加和删除行,所以这不是最好的方法

  • 我尝试使用 DidSelectedRowAtIndexPath ,但在 用户点击UITextView(UITextView最多覆盖一个单元格的80%)

在TableViewCell类中,我有:

    func textViewDidEndEditing(_ textView: UITextView) {

    // Post notification

    let userInfo = [ "text" : textView.text]

    NotificationCenter.default.post(
    name: UITextView.textDidEndEditingNotification, 
    object: nil, 
    userInfo: userInfo as [AnyHashable : Any])
}

在TableViewController中,我有:

    //Subscribe
    NotificationCenter.default.addObserver(self, 
    selector: #selector(textEditingEnded(notification:)),
    name: UITextView.textDidEndEditingNotification, 
    object: nil)


    @objc func textEditingEnded(notification:Notification) {

        guard let text = notification.userInfo?["text"] as? String else {return}
        print ("text: \(text)")   
    }

请随时询问更多详细信息。 我将不胜感激,尽我所能!

2 个答案:

答案 0 :(得分:0)

  • 在表格视图单元格中创建NSManagedObject类型的属性。
  • 在Interface Builder中,将文本视图的delegate连接到单元格。
  • 在控制器中,将cellForRowAt中的适当数据源项传递到单元格。
  • 删除观察者,而不是发布通知,而直接在NSManagedObject实例中更改属性并保存上下文。

由于NSManagedObject实例是引用类型,因此更改将继续存在。

答案 1 :(得分:0)

我希望您可以在UITableViewCell子类中为某些项目添加变量

var item: Item?

然后在cellForRowAt中为某些单元格设置特定的item

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = ...
    ...
    cell.item = array[indexPath.row]
    ...
}

现在您可以为您的单元格子类实现UITextViewDelegate,并且可以在用户完成键入操作时使用方法textViewDidEndEditing进行处理

class YourCell: UITableViewCell {
    ...
    var item: Item?
    ...
    override func awakeFromNib() {
        yourTextView.delegate = self
    }
}

extension YourCell: UITextViewDelegate {
    func textViewDidEndEditing(_ textView: UITextView) {
         ... // here save text and here you can use variable `item`
    }
}