Ios 如何在swift中保存文本字段中的文本?
我有一个由2个单元格组成的tableview,每个单元格都有一个textfield。我想将textfield中的文本保存在另一个变量中,并将其附加到数组中,但它只将第二个单元格的textfield的文本保存到变量中,而不附加数组 以下是cellForRowAt代码:Ios 如何在swift中保存文本字段中的文本?,ios,uitextfield,swift4,Ios,Uitextfield,Swift4,我有一个由2个单元格组成的tableview,每个单元格都有一个textfield。我想将textfield中的文本保存在另一个变量中,并将其附加到数组中,但它只将第二个单元格的textfield的文本保存到变量中,而不附加数组 以下是cellForRowAt代码: func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if tableView ==
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == queryTableView {
let cell = tableView.dequeueReusableCell(withIdentifier: queryCellReuseIdentifier,
for: indexPath) as! queryCell
cell.selectionStyle = UITableViewCell.SelectionStyle.gray
queryTextField = UITextField(frame: CGRect(x: 20, y: 0, width: 300, height: 20))
queryTextField.delegate = self
queryTextField.placeholder = "Soruyu buraya giriniz"
queryTextField.font = UIFont.systemFont(ofSize: 15)
cell.addSubview(queryTextField)
return cell
}
以下是我的相关功能:
func textFieldDidEndEditing(_ textField: UITextField) {
var temp = queryTextField.text!
queryArray.append(temp)
print(temp)
}
似乎您有一个独立变量
querytexfield
,当您创建第二个单元格时,它会被覆盖
另外,在textfielddendediting
中,尝试访问textField
而不是queryTextField
,如下所示:
func textFieldDidEndEditing(_ textField: UITextField) {
var temp = textField.text!
queryArray.append(temp)
print(temp)
}
对此作出回应:
我需要每个单元格都有它的文本字段,我需要能够保存
它们的文本组成一个数组。之后,我将把它们发送到web
服务总之,它们将是我的参数
queryTextField
。如果这是变量的唯一目标,则可以删除该变量indepath
),值是文本textfielddidediting
中,可以向视图控制器报告更改。为此,需要将单元格指定为其文本字段的委托。和视图控制器-作为单元格的委托。在textfielddidediting
中,单元格将调用视图控制器委托方法来报告文本更改,并将self和文本作为参数传递(例如)。视图控制器将能够找到其索引路径并将文本存储在模型(字典)中cellForRow {
...
cell = ...
let textField = ...
textField.delegate = cell
cell.addSubview(textField)
cell.delegate = self
}
单元内:
textFieldDidEndEditing(textField: UITextField) {
delegate?.report(text: textField.text ?? "", in: self)
}
视图控制器:
report(text: String, in cell: UITableViewCell) {
let indexPath = tableView.indexPath(of: cell)
model[indexPath] = text
}
如果您的项目是非故事板方法,那么我会说,控制每种类型、数据和操作将更容易、更灵活,因为有时仅使用故事板并不十分灵活。在创建时,即使是单个UIElement,UI也符合您定义的属性、方法和操作,这意味着完全自定义的代码-自定义定义的代码库 现在来回答您的问题,根据您所做的,您的textfield文本可能会被覆盖为空白,每次单元格出列时都会丢失以前输入的值,每次执行“出列单元格”方法时都会重新生成单元格以供使用,如果您想保留以前的值,我会说,“提醒退出队列的单元格在再次退出队列之前它有一些值”表示:
struct DefaultInfo {
var string: String?
var type: SomeData? //optional
}
let array: [DefaultInfo] = []
var array = self.array[indexPath.row]
// after cell is dequeued:
switch array.type {
case .someCase:
let string = cell.textField.text
array.string = string
cell.textField.text = array.string
//print(array.string!)
// now you should be able to see your input after cell is
//renewed.. . try it.. .
default: break
}
我已将queryTextField定义为全局:
var queryTextField=UITextField()
@evgeni,你每次都在cellForRowAt
中覆盖它。那么,拥有它有什么意义呢?现在,我感觉到了我的错误,但仍然无法找出正确的方法。因为这是一个非常大的项目,有数千行代码。什么是最有效的方法?@evgeniy取决于你想做什么。我给了你我的答案中有u个示例代码。这不是你要找的吗?如果不是,那是什么?也许我没有正确理解你的问题?我是一个不使用故事板创建界面的新手。我需要每个单元格都有它的文本字段,我需要能够将它们的文本保存到数组中。然后我将它们发送到web服务。总之,t“嘿,这将是我的参数。”叶甫盖尼说