大家好,我有一個關于每次按下按鈕時都將新元素添加到陣列中的問題。我有兩個視圖控制器,第一個是“RegisterViewController”,它包含一個文本欄位和一個按鈕。
@IBAction func didTapSave(_ sender: UIButton) {
usernameText.endEditing(true)
userText = usernameText.text ?? ""
performSegue(withIdentifier: "goToData", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToData" {
let destinationVC = segue.destination as! UserTableViewController
destinationVC.userData = userText
destinationVC.saveItems()
}
這個想法是將 texfield.text 添加到 SecondViewcontroller 中的 tableView
到目前為止,我可以附加一個 textfield.text,然后當我回傳 RegisterViewController 并使用不同的文本重試時,我用于 tableView 的陣列只是“編輯”最后一個字串但不添加另一個元素。
當我列印 itemArray.count 時,它始終為 0,這意味著只有一個文本,但如果我繼續在文本欄位上書寫,則不會添加其他文本
class UserTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var userData : String?
var itemArray = [Item]()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
saveItems()
}
func saveItems() {
let newItem = Item(userRegister: userData ?? "")
itemArray.append(newItem)
print(itemArray.count)
tableView.reloadData()
}
}
uj5u.com熱心網友回復:
原因是每次加載時UserTableViewController都會創建一個新的 itemArray。解決此問題的最簡單方法是使RegisterViewController您的表視圖資料源和委托。您只需要將注冊視圖控制器實體傳遞給您的表格視圖,而不是傳遞userData. 試試這樣:
class RegisterViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var usernameText: UITextField!
var items: [Item] = []
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellID", for: indexPath)
var content = cell.defaultContentConfiguration()
content.text = items[indexPath.row].userRegister
cell.contentConfiguration = content
return cell
}
@IBAction func didTapSave(_ sender: Any) {
usernameText.endEditing(true)
items.append(.init(userRegister: usernameText.text!))
performSegue(withIdentifier: "goToData", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToData" {
let destinationVC = segue.destination as! UserTableViewController
destinationVC.registerViewController = self
}
}
}
還有你的 UserTableViewController:
class UserTableViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var registerViewController: RegisterViewController?
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellID")
tableView.delegate = registerViewController
tableView.dataSource = registerViewController
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/450808.html
