web-dev-qa-db-fra.com

Comment insérer une nouvelle cellule dans UITableView dans Swift

Je travaille sur un projet où j'ai deux UITableViews et deux UITextFields, lorsque l'utilisateur appuie sur le bouton, les données du premier textField doivent entrer dans le tableView et le second va dans le second tableView. Mon problème est que je ne sais pas comment mettre des données dans la tableView à chaque fois que l'utilisateur appuie sur le bouton, je sais comment insérer des données avec tableView:cellForRowAtIndexPath: mais cela ne fonctionne qu'une seule fois. savoir. Quelle méthode puis-je utiliser pour mettre à jour le tableView chaque fois que l'utilisateur appuie sur le bouton?

65
code Horizons

Utilisez beginUpdates et endUpdates pour insérer une nouvelle cellule lorsque vous cliquez sur un bouton.

Tout d'abord, ajoutez des données dans votre tableau tableview

Yourarray.append([labeltext])  

Puis upate votre table et insère une nouvelle ligne

// Update Table Data
tblname.beginUpdates()
tblname.insertRowsAtIndexPaths([
NSIndexPath(forRow: Yourarray.count-1, inSection: 0)], withRowAnimation: .Automatic)
tblname.endUpdates()

Ceci insère une cellule et ne nécessite pas de recharger toute la table, mais si vous rencontrez un problème, vous pouvez également utiliser tableview.reloadData().


Swift 3.

tableView.beginUpdates()
tableView.insertRows(at: [IndexPath(row: yourArray.count-1, section: 0)], with: .automatic)
tableView.endUpdates()

Objective-C

[self.tblname beginUpdates];
NSArray *arr = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:Yourarray.count-1 inSection:0]];
[self.tblname insertRowsAtIndexPaths:arr withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tblname endUpdates];
156
EI Captain v2.0

Voici votre code pour ajouter des données dans les deux tablesView:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var table1Text: UITextField!
    @IBOutlet weak var table2Text: UITextField!
    @IBOutlet weak var table1: UITableView!
    @IBOutlet weak var table2: UITableView!

    var table1Data = ["a"]
    var table2Data = ["1"]

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func addData(sender: AnyObject) {

        //add your data into tables array from textField
        table1Data.append(table1Text.text)
        table2Data.append(table2Text.text)

        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            //reload your tableView
            self.table1.reloadData()
            self.table2.reloadData()
        })


        table1Text.resignFirstResponder()
        table2Text.resignFirstResponder()
    }

    //delegate methods
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableView == table1 {
            return table1Data.count
        }else if tableView == table2 {
            return table2Data.count
        }
        return Int()
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        if tableView == table1 {
            let cell = table1.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell

            let row = indexPath.row
            cell.textLabel?.text = table1Data[row]

            return cell
        }else if tableView == table2 {

            let cell = table2.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as! UITableViewCell

            let row = indexPath.row
            cell.textLabel?.text = table2Data[row]

            return cell
        }

        return UITableViewCell()
    }
}

Et votre résultat sera:

enter image description here

21
Dharmesh

Swift 3.0 Solution mise à jour

Insérer en bas

self.yourArray.append(msg)

self.tblView.beginUpdates()
self.tblView.insertRows(at: [IndexPath.init(row: self.yourArray.count-1, section: 0)], with: .automatic)
self.tblView.endUpdates()

Insérer en haut de TableView

self.yourArray.insert(msg, at: 0)
self.tblView.beginUpdates()
self.tblView.insertRows(at: [IndexPath.init(row: 0, section: 0)], with: .automatic)
self.tblView.endUpdates()
20
Sourabh Sharma