这里非常新鲜。我正在尝试制作一个简单的待办事项。
当用户键入任务时,我想尝试将此任务添加到字符串数组并增加计数器。
当我输入多个任务时,我的字符串数组只保存先前输入的任务,而我的计数器总是1(计数器基于字符串数组中的项目数)。
我假设每次输入新任务时,处理我的字符串数组和计数器的类都会重置为初始值,这是一个空字符串数组,分别为0。
任何想法如何避免这种情况,或者在用户交互方面如何加载类?
对不起,如果我不太清楚,谢谢。
class TextInputTableViewCell: UITableViewCell, UITextFieldDelegate {
...
var lastItem = 0
var tableViewData: Array<String> = []
...
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
tableViewData.append(textField.text!)
lastItem = tableViewData.count
textField.resignFirstResponder()
return true
}
ViewController主类:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
...
答案 0 :(得分:1)
问题是tableViewData
是TextInputTableViewCell
的属性。这意味着每次重新加载tableview时,都会丢失存储在此变量中的内容。您可以通过UITableViewController
UITextFieldDelegate
来解决此问题,并将文本存储在UITableViewController
的属性中。您可以在加载TextInputTableViewCell
时执行此操作。例如:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
var lastItem = 0
var tableViewData: Array<String> = []
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Load your cell
let cell: TextInputTableViewCell = ...
// Set the text field delegate
cell.textField.delegate = self
return cell
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
tableViewData.append(textField.text!)
lastItem = tableViewData.count
textField.resignFirstResponder()
return true
}
}
所以你的TextInputTableViewCell
应该是这样的:
class TextInputTableViewCell: UITableViewCell {
@IBOutlet weak var textField: UITextField!
}