Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何访问一行中的两个文本字段_Ios_Swift_Uitableview_Uitextfield - Fatal编程技术网

Ios 如何访问一行中的两个文本字段

Ios 如何访问一行中的两个文本字段,ios,swift,uitableview,uitextfield,Ios,Swift,Uitableview,Uitextfield,我有一个UITableView,在上一个视图中,动态单元格是用来创建这些单元格的滑块。 每行包含两个文本字段。 首先是距离起点的距离。 二是描述 我可以通过tableView中的单元格访问这些文本字段。 我的桌面视图: override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cellIdentifier = "Cell

我有一个UITableView,在上一个视图中,动态单元格是用来创建这些单元格的滑块。 每行包含两个文本字段。 首先是距离起点的距离。 二是描述

我可以通过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 textfielddidediting,但我不知道如何访问textFields-distance和description来将正确的值保存到我的两个数组中

我知道这个代码只适用于一个文本字段。如果我有两个文本字段,则此代码错误:

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!
        }
       }
这是我的第一个AddPointTableViewCell:

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)
    }
}
我的想法类似于textfielddidediting中的代码,但我不知道怎么做。我无法访问它们:

   arrayTextField1[distance.tag] = distance.text!
   arrayTextField2[description.tag] = description.text!

你能帮我吗?对不起,我说的是英语。

在一次调用TextFieldDiEndEditing的过程中,您试图同时设置arrayTextField1和arrayTextField2,这似乎不正确。您需要将编辑的文本字段与正确的数组相关联

一种想法是在每个UITextField的标记中编码额外的信息。您所需要的是如下所示,我们利用了标记是有符号整数这一事实:

//在tableView cellForRowAt方法中,按如下方式编辑标记设置行: cell.distance.tag=indexPath.row+1//标记将基于1,因为-0==0 cell.description.tag=-indexPath.row+1//将其存储为一个负数行,以便以后可以区分描述文本字段 func textField didendediting_textField:UITextField { guard let text=textField.text else{return} 如果textField.tag>0{ arrayTextField1[textField.tag-1]=文本 }否则,如果textField.tag<0{ arrayTextField2[abstextField.tag-1]=文本 }否则{ asserttrue//其他文本字段是否已结束编辑? } } 如果您使用上述方法,请确保将标记计算封装在某些函数中,以使将来的可维护性更加清晰


将任意数量的数据附加到UIView而不将其子类化的更优雅的解决方案是。

感谢您的时间和帮助。Assert0-出现错误-无法将Int类型的值转换为Bool。。。所以我试过了-第一个文本字段是可以的,但同一行的第二个是在第三行上下滚动tableView之后。我更改了断言,现在第二个文本字段描述为空。有gif——将UITextFields存储在一个数组中超过单元格寿命的想法是错误的。在单元格每次出列后创建它们,并从数据数组中设置它们的文本。我的标记方法仍然允许您将编辑的UITextField与两列的数据数组进行匹配。我可以编辑我的答案,但实际上它需要一个全新的问题,因为它超出了关于匹配现有文本字段数组的问题的范围。我的程序是这样工作的:用户填写路线名称、总距离和TableView中的行数。在此之后-点击下一步。然后用户在文本字段中填写从开始到结束的每一行距离,比如检查点和描述。所以不可能从数组中加载数据,因为它是空的,需要通过textField将数据放入数组中。您能给我一些建议吗?或者问题是我试图从错误的角度来解决它?我知道如果用户首先填写所有距离检查点-保存,然后在新的表格中查看所有描述。。但我认为这对用户来说是一个漫长的过程。