【发布时间】:2019-06-11 04:38:22
【问题描述】:
我在表格视图的自定义单元格中有两个文本字段(故事标题和作者),我想通过 textFieldDidEndEditing 方法编辑和保存这些字段中的数据。如何区分方法中的两个字段?
我目前的代码如下:
func textFieldDidEndEditing(_ textField: UITextField) {
let touchPosition:CGPoint = textField.convert(CGPoint.zero, to:self.storiesTableView)
let indexPath = self.storiesTableView.indexPathForRow(at: touchPosition)
let storyForEdit = self.stories?[indexPath!.row]
var editedTitleText = ""
let cell = tableView(storiesTableView, cellForRowAt: indexPath!) as! StoryCell
let storyTitleField = cell.storyTitleField
if textField.text?.isEmpty ?? true {
deleteTitle(at: storyForEdit!)
} else {
editedTitleText = textField.text ?? ""
do {
try self.realm.write {
storyForEdit!.title = editedTitleText
}
} catch {
print("Error editing story \(error)")
}
self.storiesTableView.reloadData()
}
}
我有 storyCell.swift 中两个字段的参考出口:
class StoryCell: UITableViewCell {
@IBOutlet weak var storyTitleField: UITextField!
@IBOutlet weak var authorField: UITextField!
....}
但是,当我尝试使用代码(此处建议:iphone: uitextfield, multiple textfields with the same delegate?)来区分这两个字段时:
if textField == storyTitleField {
print("Here we are in storyTitle field")
}
什么都没有发生 - 没有数据被持久化。但是,如果我只使用通用文本字段,那么我无法区分标题和作者文本字段。感谢您对此提出任何建议。
【问题讨论】:
-
使用组件的
tag属性? -
感谢您的快速回复。我已经在其他帖子中看到了这个建议,并会尝试一下,但是,我认为参考网点已经存在于这些领域的参考网点将是要走的路?
-
出口是否与代表处于同一上下文中?如果是这样,您可以简单地将
textField与网点进行比较。如果委托是在其他上下文中声明的,那么使用tag可能是(稍微)更好的解决方案 -
出口在storyCell.swift中。 DidEndEditing 在视图控制器中。
-
然后将网点与参考进行比较是行不通的。您可以在表格视图中有多个单元格实例,并且很难确定哪个单元格已被编辑。从长远来看,使用
tag更简单,更不容易出错
标签: swift uitableview uitextfield