0
votes

Je veux ajouter une nouvelle ligne à UitailView en cliquant sur un bouton

Lorsque je clique sur le bouton Ajouter, il renvoie l'erreur "Tentative d'insérer la rangée 0 dans la section 0, mais il n'y a que 0 rangée dans la section 0 après la mise à jour"

import UIKit 

class PlacesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var addPointTableArray = [""]
    @IBOutlet weak var addPointableview: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        addPointableview.delegate = self
    }

    @objc @IBAction func addPointButton(_ sender: Any) {
        addPointableview.beginUpdates()
        addPointableview.insertRows(at: [IndexPath(row: addPointTableArray.count - 1, section: 0)], with: .automatic)
        addPointableview.endUpdates()
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath:    IndexPath) -> UITableViewCell {
        let cell = addPointableview.dequeueReusableCell(withIdentifier:  "addCell", for: indexPath as IndexPath) as! AddPointCellCell
        cell.addPointTextfiedl.tag = indexPath.row
        cell.addPointTextfiedl.addTarget(self, action:  #selector(addPointButton(_:)), for: UIControl.Event.touchUpInside)
        addPointableview.beginUpdates()
        addPointableview.insertRows(at: [IndexPath(row: addPointTableArray.count-1, section: 0)], with: .automatic)
        addPointableview.endUpdates()
        return cell
    }

}


0 commentaires

3 Réponses :


0
votes

Vous ne devez pas insérer des lignes dans votre Cellforfornor (à:) méthode.

Vous devez également mettre à jour votre modèle de données afin qu'il y ait des données pour ces nouveaux index. La vue Table de la table demandera des données pour les cellules sur les nouvelles index de l'index afin d'actualiser et si le modèle de données n'est pas mis à jour pour contenir des données pour les nouvelles cellules, vous pouvez planter.


0 commentaires

0
votes

Ce n'est pas la bonne façon d'ajouter des rangées dans une vue de table. Tout d'abord, vous n'avez pas à ajouter des lignes dans TableView (_: Cellforat :) CODE>.

La Source de données de la table doit être modifiée afin d'atteindre ce que vous voulez. Depuis que vous avez écrit ce p> xxx pré>

la vue table attend toujours d'avoir deux lignes. P>

solution h2>

donc, tout d'abord vous Doit retourner le numéro de la matrice car il indique la vue Table de voir combien de lignes seront affichées. p> xxx pré>

puis, si vous souhaitez ajouter une nouvelle ligne, vous devez ajouter Mettez à jour la matrice avant forte> appelant INSERTROWS (AT: avec:) CODE>: P>

import UIKit

class PlacesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var addPointTableArray = [""]
    @IBOutlet weak var addPointableview: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        addPointableview.dataSource = self
        addPointableview.delegate = self
    }

    @IBAction func addPointButton(_ sender: Any) {
        addPointTableArray.append("New element")
        addPointableview.insertRows(at: [IndexPath(row: addPointTableArray.count - 1, section: 0)], with: .automatic)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return addPointTableArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = addPointableview.dequeueReusableCell(withIdentifier: "addCell", for: indexPath) as! AddPointCellCell
        cell.addPointTextfiedl.tag = indexPath.row
        cell.addPointTextfiedl.addTarget(self, action:  #selector(addPointButton(_:)), for: UIControl.Event.touchUpInside)
        return cell
    }

}


2 commentaires

Merci d'avoir répondu. J'apprécie votre conseil aussi. Cordialement


S'il vous plaît si vous appréciez, votez ou définissez le mieux si vous pensez que c'est



0
votes

Une vue de table affiche le contenu de la matrice source de données. Si vous utilisez INSERTULTS code>, vous devez ajouter un élément à la source de données avant de mettre à jour l'interface utilisateur.

n'appelle jamais insérer / deleterows code> dans cellules cellules >. Et beginUpdates / endupdates code> est inutile pour une seule opération d'insertion. P>

class PlacesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var addPointTableArray = ["0"]

    @IBOutlet weak var addPointableview: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        addPointableview.delegate = self
        addPointableview.datasource = self
    }

    @objc @IBAction func addPointButton(_ sender: Any) {
       let insertionIndex = addPointTableArray.count
       let indexPath = IndexPath(row: insertionIndex, section: 0)
       addPointTableArray.append(String(insertionIndex))
       addPointableview.insertRows(at: [indexPath], with: .automatic)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return addPointTableArray.count // never hard-code the return value, return the number of item in the data source
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

       let cell = addPointableview.dequeueReusableCell(withIdentifier: "addCell", for: indexPath) as! AddPointCellCell   
       cell.addPointTextfiedl.tag = Int(addPointTableArray[indexPath.row])
       // assign values of the data source array to UI elements
       cell.addPointTextfiedl.addTarget(self, action:  #selector(addPointButton), for: UIControl.Event.touchUpInside)    
       return cell    
     }   
   }


0 commentaires