用户输入不适用于在表格视图中以编程方式添加的文本字段

Posted

技术标签:

【中文标题】用户输入不适用于在表格视图中以编程方式添加的文本字段【英文标题】:User Input not working on Text Field added programmatically in Table View 【发布时间】:2018-02-13 03:58:24 【问题描述】:

我正在尝试添加用户可编辑的文本字段。我能够为表格的每个不同单元格显示文本字段,但我无法让用户输入。它不显示键盘。我启用了用户交互。这是我的代码。请忽略注释掉的部分。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "transportCell", for: indexPath)

  //self.tableView.rowHeight = 100



    //var a = Array(words[indexPath.row])

    //a.shuffle()

    //var shuffledWord = String(a)


    //shuffledWord = shuffledWord.lowercased()

    let sampleTextField =  UITextField(frame: CGRect(x: 20, y: 100, width: 300, height: 40))
    sampleTextField.placeholder = "Enter text here"
    sampleTextField.font = UIFont.systemFont(ofSize: 15)
    sampleTextField.borderStyle = UITextBorderStyle.roundedRect
    sampleTextField.autocorrectionType = UITextAutocorrectionType.no
    sampleTextField.keyboardType = UIKeyboardType.alphabet
    sampleTextField.returnKeyType = UIReturnKeyType.done
    sampleTextField.clearButtonMode = UITextFieldViewMode.whileEditing;
    sampleTextField.contentVerticalAlignment = UIControlContentVerticalAlignment.center
    sampleTextField.delegate = self as? UITextFieldDelegate


   // cell.textLabel?.text = shuffledWord

   // var imageName = UIImage(named: words[indexPath.row])
    //cell.imageView?.image = imageName

    return cell

如果可能的话,您能否告诉我如何将用户的输入存储为变量?

提前致谢

【问题讨论】:

您永远不会将文本字段添加到单元格中。您确实应该有一个自定义单元格类来为自己设置文本字段。该代码不属于cellForRowAt 【参考方案1】:

正如@rmaddy 所说,首先,您必须将该文本字段添加到您的单元格中...

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell ......

  sampleTextField.text = arrTextFieldVal[indexPath.item]//this array for stroing the user input values..
  sampleTextField.tag = indexPath.item // u will access the text field with this value 
  cell.addSubview(sampleTextField)........

其次,您可以通过管理字符串数组来存储用户值,例如 ...

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return arrTextFieldVal.count 

并像这样从文本字段委托中获取值...

 func textFieldDidEndEditing(_ textField: UITextField) 
    arrTextFieldVal[textField.tag] = textField.text!


func textFieldShouldReturn(_ textField: UITextField) -> Bool 
    textField.resignFirstResponder()
    return true

【讨论】:

细胞被重复使用。您最终将使用这样的代码向每个单元格添加越来越多的文本字段。 Benjamin Okeefe 学生使用带有文本字段的自定义单元格,否则@rmaddy 提到的问题将会出现。【参考方案2】:

请参考this answer看看对你有没有帮助。

另外,请检查您是否在 textFieldShouldBeginEditing、shouldChangeCharactersIn 或 textFieldShouldBeginEditing 的 textfield 代表上退出键盘。

【讨论】:

以上是关于用户输入不适用于在表格视图中以编程方式添加的文本字段的主要内容,如果未能解决你的问题,请参考以下文章

单击手势不适用于以编程方式添加的子视图

如何在android中以编程方式查找TextView的文本区域(高度/宽度)

在表格视图单元格中以编程方式显示图像

如何在表格视图中以编程方式选择一行? (斯威夫特 4.0)

获取 Button 和 Textfield 数据,当它们在 swift 5 中以编程方式添加时

在 Swift 中以编程方式将视图添加到 stackview