如何将 didFinishEditing (textField) 与自定义单元格一起使用?
How to use didFinishEditing (textField) with custom cells?
我有自定义单元格,每个单元格中都有一个文本字段。当我更改其中的文本时,我想获取当前行,然后正确更新我的数组。到目前为止,我认为我什至无法完成 didFinishEditing 运行。我在那里放了一个简单的打印命令,当我更改 textFields 时,什么也没有打印出来。我不确定我应该把函数放在哪里,在单元格的 class 或主 class 中。在主 class 中它没有 运行,在单元格-class 中它不能给我索引 path.row。
这是我尝试过的方法:
func textFieldDidEndEditing(_ itemTitle: UITextField) {
let pointInTable = itemTitle.convert(itemTitle.bounds.origin, to: self.tableView)
let textFieldIndexPath = self.tableView.indexPathForRow(at: pointInTable)
items.insert(itemTitle.text!, at: textFieldIndexPath)
//tableView.reloadData()(This isn't really that important)
}
还有这个:
func textFieldDidEndEditing(_ itemTitle: UITextField) {
items.insert(itemTitle.text!, at: indexPath.row)
//tableView.reloadData()(This isn't really that important)
}
这是我的手机 class:
class ItemTableViewCell: UITableViewCell {
@IBOutlet weak var itemTitle: UITextField!
@IBOutlet weak var date: UILabel!
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
itemTitle.resignFirstResponder()
}//(Not relevant)
}
在我的主要 class 我有以下内容:
class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
以及我的视图布局的屏幕截图:
Screenshot link
我刚刚学会了自定义单元格,所以我开始学习了。我以前使用过 .default 和 .subtitle 单元格以及表格视图。
感谢您的任何回答!
你没有打印出任何东西,因为 UITextFieldDelegate 必须在你的 TableViewCell 中,然后你可以使用委托将你在 textField 中使用的单元格和文本传递给 viewController 并且在那里你可以访问你的 tableView 和你的 indexPath。
尝试这样的事情:
在这里创建委托并将 textField 委托放入 customCell
protocol ItemTableViewCellDelegate: NSObjectProtocol {
func textFieldDidEndEditing(text: String, cell: ItemTableViewCell)
}
class ItemTableViewCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var itemTitle: UITextField!
@IBOutlet weak var date: UILabel!
var delegate: ItemTableViewCellDelegate?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
itemTitle.resignFirstResponder()
}
override func awakeFromNib() {
itemTitle.delegate = self
}
func textFieldDidEndEditing(_ textField: UITextField) {
if let text = textField.text {
delegate?.textFieldDidEndEditing(text: text, cell: self)
}
}
}
你的 class 从你的自定义委托扩展而来。在委托函数中,您可以使用 indexPath(for: cell)
访问 indexPath
class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, ItemTableViewCellDelegate {
func textFieldDidEndEditing(text: String, cell: ItemTableViewCell) {
if let indexPath = tableView.indexPath(for: cell) {
items.insert(text, at: textFieldIndexPath)
}
}
}
我有自定义单元格,每个单元格中都有一个文本字段。当我更改其中的文本时,我想获取当前行,然后正确更新我的数组。到目前为止,我认为我什至无法完成 didFinishEditing 运行。我在那里放了一个简单的打印命令,当我更改 textFields 时,什么也没有打印出来。我不确定我应该把函数放在哪里,在单元格的 class 或主 class 中。在主 class 中它没有 运行,在单元格-class 中它不能给我索引 path.row。
这是我尝试过的方法:
func textFieldDidEndEditing(_ itemTitle: UITextField) {
let pointInTable = itemTitle.convert(itemTitle.bounds.origin, to: self.tableView)
let textFieldIndexPath = self.tableView.indexPathForRow(at: pointInTable)
items.insert(itemTitle.text!, at: textFieldIndexPath)
//tableView.reloadData()(This isn't really that important)
}
还有这个:
func textFieldDidEndEditing(_ itemTitle: UITextField) {
items.insert(itemTitle.text!, at: indexPath.row)
//tableView.reloadData()(This isn't really that important)
}
这是我的手机 class:
class ItemTableViewCell: UITableViewCell {
@IBOutlet weak var itemTitle: UITextField!
@IBOutlet weak var date: UILabel!
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
itemTitle.resignFirstResponder()
}//(Not relevant)
}
在我的主要 class 我有以下内容:
class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
以及我的视图布局的屏幕截图:
Screenshot link
我刚刚学会了自定义单元格,所以我开始学习了。我以前使用过 .default 和 .subtitle 单元格以及表格视图。
感谢您的任何回答!
你没有打印出任何东西,因为 UITextFieldDelegate 必须在你的 TableViewCell 中,然后你可以使用委托将你在 textField 中使用的单元格和文本传递给 viewController 并且在那里你可以访问你的 tableView 和你的 indexPath。
尝试这样的事情:
在这里创建委托并将 textField 委托放入 customCell
protocol ItemTableViewCellDelegate: NSObjectProtocol {
func textFieldDidEndEditing(text: String, cell: ItemTableViewCell)
}
class ItemTableViewCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var itemTitle: UITextField!
@IBOutlet weak var date: UILabel!
var delegate: ItemTableViewCellDelegate?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
itemTitle.resignFirstResponder()
}
override func awakeFromNib() {
itemTitle.delegate = self
}
func textFieldDidEndEditing(_ textField: UITextField) {
if let text = textField.text {
delegate?.textFieldDidEndEditing(text: text, cell: self)
}
}
}
你的 class 从你的自定义委托扩展而来。在委托函数中,您可以使用 indexPath(for: cell)
访问 indexPathclass PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, ItemTableViewCellDelegate {
func textFieldDidEndEditing(text: String, cell: ItemTableViewCell) {
if let indexPath = tableView.indexPath(for: cell) {
items.insert(text, at: textFieldIndexPath)
}
}
}