[英]How to append elements into an array from another View Controller in Swift
大家好,我有一個關於 append 的問題,每次我按下按鈕時都會將一個新元素放入數組中。 我有兩個視圖控制器,第一個“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
到目前為止,我可以 append 一個 textfield.text,然后當我 go 回到 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()
}
}
原因是每次加載UserTableViewController
時都會創建一個新的 itemArray。 解決此問題的最簡單方法是讓RegisterViewController
成為您的表視圖數據源和委托。 您只需要將注冊視圖 controller 實例傳遞給您的表視圖,而不是傳遞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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.