如何在另一个函数内引用自定义UITableView单元格(Swift)

时间:2019-06-16 15:01:24

标签: swift uitableview custom-cell

我正在尝试实现类似于Apple的提醒应用程序的功能,在该应用程序中,表格视图包含所有提醒,最后的+按钮添加了一个新对象。

我的对象保存在名为tempActions的数组中,该数组是tableView的数据源。

按下“添加操作”,会将新对象添加到标题为“空单元格”的数组。enter image description here

标题是UITextView,用户可以对其进行编辑,但是我不知道该怎么做:

如何从特定单元格的UITextView中获取文本,将其附加到数组的正确索引处(索引对应于indexPath.row),然后将其显示在该单元格中。标签?

我考虑过使用textViewDidEndEditing方法,但是我不知道该怎么做,是从cellForRowAt方法中引用正确的单元格。

任何人都可以帮助澄清这一点,还是我以错误的方式进行处理?

这是整个课程的代码:

class Step3: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextViewDelegate {

// Outlets
@IBOutlet weak var sectionText: UILabel!
@IBOutlet weak var sectionHeader: UILabel!
@IBOutlet weak var teableViewHeight: NSLayoutConstraint!
@IBOutlet weak var tableview: UITableView!

@IBAction func addAction(_ sender: Any) {

    tempActions.append(Action(title: "Empty Cell", completed: false))

    tableview.reloadData()
    tableview.layoutIfNeeded()
    teableViewHeight.constant = tableview.contentSize.height

    print(tempActions)
}

@IBAction func nextAction(_ sender: Any) {

    let newGoal = Goal(
        title: tempTitle,
        description: tempDescription,
        duration: tempDuration,
        actions: nil,
        completed: false
    )

    newGoal.save()

    performSegue(withIdentifier: "ToHome", sender: nil)
}


func textViewDidEndEditing(_ textView: UITextView) {
}


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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ActionCell", for: indexPath) as! ActionCell

    cell.label.text = tempActions[indexPath.row].title
    cell.label.textContainerInset = UIEdgeInsets(top: 12, left: 0, bottom: 12, right: 0);
    cell.label.delegate = self

    return cell
}

override func viewDidLoad() {
    super.viewDidLoad()
    tableview.estimatedRowHeight = 40
    tableview.rowHeight = UITableView.automaticDimension
}

}

预先感谢

1 个答案:

答案 0 :(得分:1)

如果我理解的话– textView在单元格中,并且您想在textViewDidEndEditing中找到该单元格。如果文本字段的超级视图是单元格,则可以执行以下操作:

func textViewDidEndEditing(_ textView: UITextView) {
    if let cell = textView.superview as? ActionCell, 
         let indexPath = tableView.indexPath(for: cell) {
      // Now you have the indexPath of the cell
      // update tempActions

           // YOUR CODE HERE

      // Then reloadRows
      tableView.reloadRows(at: [indexPath]), with: .automatic)
    }
}

您可以做的另一件事是使tempAction的类型具有唯一的ID,然后将其存储在ActionCell中-当您要查找索引时,请在tempActions数组中查找ID以查找其索引。