簡體   English   中英

如何將append個元素從另一個數組中查看Swift中的Controller

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM