从 Swift (3.1) 表格视图中动态创建的单元格获取有序的文本字段数据

Posted

技术标签:

【中文标题】从 Swift (3.1) 表格视图中动态创建的单元格获取有序的文本字段数据【英文标题】:Getting Ordered TextField Data From Dynamically Created Cells in Swift (3.1) Table View 【发布时间】:2016-11-04 19:31:05 【问题描述】:

我试图弄清楚如何以有序的方式从表格视图中的单元格获取文本字段数据。到目前为止,我能够在每个文本字段中输入检索类型数据。要以正确的顺序执行此操作,尽管用户必须编辑第一个单元格...最后一个单元格,任何其他方式并且数据的顺序不正确。

例如:

我让程序创建 5 个带有文本字段的单元格,

textfield1:我第二次在这里输入 textfield2:我在这里输入了第四个 textfield3:我先在这里输入 textfield4:我在这里输入了第五个 textfield5:我在这里输入了第三个

按照我目前的方式,我的 dataArray 看起来与这个相同,因为它是根据输入的时间而不是单元格的顺序来存储的。 我想输入上面的例子,但我的数据是这样的:

textfield1:我先在这里输入 textfield2:我第二次在这里输入 textfield3:我在这里输入了第三个 textfield4:我在这里输入了第四个 textfield5:我在这里输入了第五个

这是我的文本字段编辑代码:

@IBAction func TitleEditBegin(_ sender: UITextField) 


@IBAction func TitleEditEnd(_ sender: UITextField) 
    print(sender.tag) // Debug
    titleArray.append(sender.text!)

我暂时知道titleArray会附加任何其他更改,但我想先解决排序问题。

谢谢!

编辑:我忘了添加如何创建单元格,代码如下:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = TitleSessionTableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath) as! TitleSessionCell

    cell.SessionTitleLabel.text = "Title"
    // cell.SessionTitleField.text = "Default"
    cell.SessionTitleField.tag = indexPath.row
    cell.SessionTitleField.delegate = self
    print(indexPath.row) // Debug

    return cell


编辑 2:添加我定义文本字段的位置。

import Foundation
import UIKit

class TitleSessionCell: UITableViewCell

@IBOutlet weak var SessionTitleField: UITextField!
@IBOutlet weak var SessionTitleLabel: UILabel!


override func awakeFromNib() 
    super.awakeFromNib()




【问题讨论】:

【参考方案1】:

我相信最简单的方法是使用字典。我会为所有的 textFields 分配一个不同的标签。所以对于 textField1 你会说textField1.tag = 1。我没有看到您的文本字段的创建,因此很难展示添加它的最佳方式,但在处理完之后,我会将字典创建为类变量。

var textFieldDictionary: [Int: String] = [:]

然后像这样添加文本:

if sender.text != nil && sender.text != "" 
    textFieldDictionary[sender.tag] = sender.text

然后,当您要检索信息时,请执行以下操作:

for i in 0..<biggestTextFieldNumber 
    if let text = textFieldDictionary[i] 
        //do something with text
        print(text)
    

或者您可以在需要时使用以下方法获取特定的数值:

textFieldDictionary[numberYouWant]

我希望这会有所帮助!

【讨论】:

我现在的问题是,首先编辑的任何文本字段都会被赋予 sender.tag = 0。因此,一旦发生这种情况,其他一切都会失控。有没有办法调用单元格来获取它的标签? 你能把cellForRow函数发给你吗 首先编辑的单元格不会被赋予 sender.tag = 0 除非您还在其他地方为文本字段设置了标签。您正在做的是根据首先输入的文本字段将文本放置在数组中。如果您按照我说的那样做,那么情况就不会如此,因为无论您何时存储信息,它都是通过值而不是其组类型中的位置来检索的。 所以由于我的单元格是动态创建的,我会编写一个循环来创建那些文本字段标签?文本字段在表格视图单元类中创建。 我添加了定义文本字段的类。

以上是关于从 Swift (3.1) 表格视图中动态创建的单元格获取有序的文本字段数据的主要内容,如果未能解决你的问题,请参考以下文章

如何根据swift 3中的集合视图高度动态增加表格视图高度?

如何在 swift 中在动态 TableView 中创建动态 tableView?

使用 Storyboard 的 Swift 动态表格视图单元格高度

如何从动态创建的表格视图单元格的输入字段中将数据检索到数组

解析对象数组并填充表格视图单元格 Swift

ios swift - 表格视图单元格动态高度取决于设备