如何连续访问两个TextField

时间:2017-08-13 00:37:41

标签: ios swift uitableview uitextfield

我有一个带有动态单元格的UITableView(在之前的View中是创建这些单元格的滑块)。 每行包含两个TextField。 首先是距离开始的距离。 第二是描述。

Screen TableView

我可以通过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!
你能帮帮我吗?抱歉我的英文。

1 个答案:

答案 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