我有一个带有动态单元格的UITableView
(在之前的View中是创建这些单元格的滑块)。
每行包含两个TextField。
首先是距离开始的距离。
第二是描述。
我可以通过tableView中的单元格访问这些textFields。 我的tableView:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "Cell"
let cell: FirstAddPointTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! FirstAddPointTableViewCell
cell.numberOfCell.text? = "\(indexPath.row + 1)."
cell.distance.text? = arrayTextField1[indexPath.row]
cell.description.text? = arrayTextField2[indexPath.row]
cell.distance.tag = indexPath.row
cell.description.tag = indexPath.row
cell.distance.delegate = self
cell.description.delegate = self
return cell
我的代码func textFieldDidEndEditing
但是我不知道如何访问textFields - 距离和描述以将正确的值保存到我的两个数组中。
我知道这个代码只适用于一个textField。如果我有两个textFields,那么这段代码就错了:
func textFieldDidEndEditing(_ textField: UITextField) {
print("End editing!")
if textField.text != "" {
arrayTextField1[textField.tag] = textField.text!
arrayTextField2[textField.tag] = textField.text!
} else if textField.text == "" {
arrayTextField1[textField.tag] = textField.text!
arrayTextField2[textField.tag] = textField.text!
}
}
有我的FirstAddPointTableViewCell:
import UIKit
class FirstAddPointTableViewCell: UITableViewCell {
@IBOutlet weak var cislovaniPrekazek: UILabel!
@IBOutlet weak var prekazkyFormulare: UITextField!
@IBOutlet weak var poznamkyFormulare: UITextField!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
我的“想法”就像这段代码(在textFieldDidEndEditing
中),但我不知道该怎么做。我无法访问它们:
arrayTextField1[distance.tag] = distance.text!
arrayTextField2[description.tag] = description.text!
你能帮帮我吗?抱歉我的英文。
答案 0 :(得分:0)
在单次调用textFieldDidEndEditing()期间尝试设置arrayTextField1和arrayTextField2似乎不对。您需要将已编辑的textField与正确的数组相关联。
一种想法是在每个UITextField的标记中编码额外信息。您需要的只是下面的内容,我们利用标记为签名整数的事实:
// In your tableView cellForRowAt method edit the tag setting lines as such:
cell.distance.tag = indexPath.row + 1 // tag will be 1-based since -0 == 0
cell.description.tag = -(indexPath.row + 1) // store it as a negative row so we can distinguish description text fields later
func textFieldDidEndEditing(_ textField: UITextField)
{
guard let text = textField.text else { return }
if textField.tag > 0
{
arrayTextField1[textField.tag - 1] = text
}
else if textField.tag < 0
{
arrayTextField2[abs(textField.tag - 1)] = text
}
else
{
assert(true) // some other text field ended editing?
}
}
如果你采用上述方法,请务必将标签计算封装在某些功能中,以便将来可以清楚地使用。
更优雅的解决方案是将任意数量的数据附加到UIView而不进行子类化here。