在单元格内编辑textview时,将另一个单元格添加到tableview
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在单元格内编辑textview时,将另一个单元格添加到tableview相关的知识,希望对你有一定的参考价值。
我想在此之前加上我不使用故事板的事实。
我有一个包含多个部分的tableview,这些部分填充了我以编程方式创建的tableViewcells。这些自定义单元格包含带有一些占位符文本的文本字段。我希望用户能够做的是点击文本字段,键入他们的条目,然后点击“Enter”以关闭键盘,然后在他们刚刚编辑的单元格下面创建一个新单元格。这与提醒应用中发生的行为非常相似。
我很难弄清楚如何访问tableview的数据模型(数组)并找出该单元所在的部分,将新字符串添加到数组中,然后添加另一个具有占位符的dumby单元格文本。
答案
首先,您必须创建一种在单元和视图控制器之间进行通信的方法。您可以使用委托模式或回调。例如:
final class TextFieldCell: UITableViewCell {
// MARK: - IBOutlets
@IBOutlet weak var textField: UITextField!
// MARK: - Local variables
var callback: ((_ text: String) -> Void)?
// MARK: - Lyfecycle
override func awakeFromNib() {
super.awakeFromNib()
textField.delegate = self
}
}
另外别忘了打电话给我们的回调:
extension TextFieldCell: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
callback?(textField.text!)
return true
}
}
大!现在我们将字符串从单元格发送到控制器!
视图控制器的代码示例(简化版):
class ViewController: UIViewController {
// MARK: - IBOutlets
@IBOutlet weak var tableView: UITableView!
// MARK: - Local variables
var titles = ["Hello", "world"]
}
// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return titles.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let textFieldCell = tableView.dequeueReusableCell(withIdentifier: "textFieldCell", for: indexPath) as! TextFieldCell
textFieldCell.textField.placeholder = titles[indexPath.row]
textFieldCell.callback = { [weak self] newTitle in // don't forget about memory leaks
guard let `self` = self else { return }
// calculating index path for new row
let newIndexPath = IndexPath(row: indexPath.row + 1, section: indexPath.section)
// appending a new row in table view
self.titles.append(newTitle)
self.tableView.insertRows(at: [newIndexPath], with: UITableView.RowAnimation.automatic)
}
return textFieldCell
}
}
以上是关于在单元格内编辑textview时,将另一个单元格添加到tableview的主要内容,如果未能解决你的问题,请参考以下文章