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
}
}
3 Réponses :
Vous ne devez pas insérer des lignes dans votre 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. P> Cellforfornor (à:) code> méthode. p>
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 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> la vue table attend toujours d'avoir deux lignes. P> 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> puis, si vous souhaitez ajouter une nouvelle ligne, vous devez ajouter Mettez à jour la matrice TableView (_: Cellforat :) CODE>. solution h2>
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
}
}
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
Une vue de table affiche le contenu de la matrice source de données. Si vous utilisez n'appelle jamais INSERTULTS code>, vous devez ajouter un élément à la source de données avant de mettre à jour l'interface utilisateur. 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
}
}