gpt4 book ai didi

ios - swift : retrieving text from a UITextField in a custom UITableViewCell and putting it in an array

转载 作者:可可西里 更新时间:2023-11-01 03:06:22 25 4
gpt4 key购买 nike

我正在制作一个非常简单的应用程序,用户可以在第一个屏幕中输入人数。

在第二个屏幕中它生成了一个数字 UITableViewCell基于用户在第一个屏幕中输入的数字。 UITableViewCell有一个UITextField在它们中,一旦用户点击转到第三个屏幕,我就会尝试将在这些字段中输入的数据存储在一个数组中。

我该怎么做?
提前致谢!

编辑:我正在使用 Storyboard。

这是调用自定义 UITableViewCell 的代码看起来像我的 UIViewController :

func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

var cell: EditingCell = tableView.dequeueReusableCellWithIdentifier("Cell") as EditingCell

if indexPath.row % 2 == 0{
cell.backgroundColor = UIColor.purpleColor()
} else {
cell.backgroundColor = UIColor.orangeColor()
}

let person = arrayOfPeople[indexPath.row]

cell.setCell(person.name)


return cell
}

这是 UITableViewCell 的代码看起来像:

class EditingCell: UITableViewCell{

@IBOutlet weak var nameInput: UITextField!


override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}


func setCell(name:String){
self.nameInput.placeholder = name
}
}

最佳答案

如果表格中的行数超过屏幕上可以显示的行数,那么您的方法就有问题。在这种情况下,滚动到屏幕外的单元格将被重新使用,nameInput 文本字段的内容将丢失。如果您可以确定这永远不会发生,请使用以下代码(在处理按钮点击的方法中)来组成您的数组:

        var arrayOfNames : [String] = [String]()
for var i = 0; i<self.arrayOfPeople.count; i++ {
let indexPath = NSIndexPath(forRow:i, inSection:0)
let cell : EditingCell? = self.tableView.cellForRowAtIndexPath(indexPath) as EditingCell?
if let item = cell?.nameInput.text {
arrayOfNames.append(item)
}
}
println("\(arrayOfNames)")

或者……

但是,如果单元格可能会滚动到屏幕外,我建议采用不同的解决方案。为 nameInput 文本字段设置 delegate,然后使用委托(delegate)方法获取输入的名称。

首先,将变量添加到您的 View Controller ,以保存数组和当前正在编辑的文本字段的行号。

    var arrayOfNames : [String] = [String]()
var rowBeingEdited : Int? = nil

然后,在您的 cellForRowAtIndexPath 方法中,添加:

    cell.nameInput.text = "" // just in case cells are re-used, this clears the old value
cell.nameInput.tag = indexPath.row
cell.nameInput.delegate = self

然后添加两个新函数,以捕获文本字段开始/结束编辑的时间:

func textFieldDidEndEditing(textField: UITextField) {
let row = textField.tag
if row >= arrayOfNames.count {
for var addRow = arrayOfNames.count; addRow <= row; addRow++ {
arrayOfNames.append("") // this adds blank rows in case the user skips rows
}
}
arrayOfNames[row] = textField.text
rowBeingEdited = nil
}

func textFieldDidBeginEditing(textField: UITextField) {
rowBeingEdited = textField.tag
}

当用户点击按钮时,他们可能仍在编辑其中一个姓名。为了满足这一点,将以下内容添加到处理按钮点击的方法中:

        if let row = rowBeingEdited {
let indexPath = NSIndexPath(forRow:row, inSection:0)
let cell : EditingTableViewCell? = self.tableView.cellForRowAtIndexPath(indexPath) as EditingTableViewCell?
cell?.nameTextField.resignFirstResponder()
}

这会强制 textField 完成编辑,从而触发 didEndEditing 方法,从而将文本保存到数组中。

关于ios - swift : retrieving text from a UITextField in a custom UITableViewCell and putting it in an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com