大家好,我有一个问题,每次我按下一个按钮,我都会在数组中添加一个新元素.我有两个视图控制器,第一个是"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()
}

我们的 idea 是添加texfield.文本到SecondViewcontroller中的tableView

到目前为止,我可以附加一个文本字段.文本,然后当我返回RegisterViewController并使用其他文本重试时,我用于tableView的数组只"编辑"最后一个字符串,但不添加其他元素.

当我打印itemArray时.计数它总是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设置为表视图数据源和委托.您只需要将register view controller实例传递给tableview,而不是传递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
    }
}

Ios相关问答推荐

如何遮罩,动画和添加阴影到CAShapeLayer?

Jenkins node 无法运行fastlane命令-未找到命令

通过在SWIFT中不起作用的泛型传递协议一致性类型

在金属中设置纹理的UV坐标以编程方式变形纹理

如果没有等待,SWIFT Async让任务抛出取消异常

无法下载并安装带有Xcode 15.0的iOS 17.0模拟器运行时

mapView swift 导致警告有网格错误

Swift Combine和iOS版本限制?

为什么常量属性可能在 Swift 类中被初始化两次?

如何包含 Xcode 子项目标头?

将角半径仅应用于 Swiftui 中按钮的两个角

Swift 5.7 - 使存在的任何协议符合 Hashable

我可以在 Apple-Watch 上使用 iPhone 的摄像头扫描 SwiftUi 中的二维码(例如用于登录)吗

iOS,Swift 5,AppDelegate open url / .onOpenUrl - 如何找到调用我的自定义方案的调用应用程序

UIScrollview 获取touch 事件

通过 iOS 创建和导出动画 gif?

故事板中的 colored颜色 与 UIColor 不匹配

Select 器touchesBegan:withEvent:的覆盖方法具有不兼容的类型(NSSet,UIEvent)->()

有没有办法在应用store 之外分发 ios 应用程序?

UIGestureRecognizer 阻止子视图处理touch 事件