Cómo insertar una nueva celda en UITableView en Swift

Estoy trabajando en un proyecto en el que tengo dos UITableView y dos UITextField s, cuando el usuario presiona el botón, los datos en el primer textField deben ir a tableView y el segundo a la segunda tableView . Mi problema es que no sé cómo poner datos en la tableView Cada vez que el usuario presiona el botón, sé cómo insertar datos con tableView:cellForRowAtIndexPath: pero eso funciona por una vez hasta donde yo sé. Entonces, ¿qué método puedo usar para actualizar tableView cada vez que el usuario presiona el botón?

Utilice beginUpdates y endUpdates para insertar una nueva celda cuando se endUpdates clic en el botón.

En primer lugar, agregue datos en su matriz tableview

  Yourarray.append([labeltext]) 

Luego apaga tu mesa e inserta una nueva fila

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

Esto inserta la celda y no necesita volver a cargar la tabla completa, pero si tiene algún problema con esto, también puede usar tableview.reloadData()


rápido 3.0

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

C objective

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

Aquí está su código para agregar datos en ambos tableView:

 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() } } 

Y tu resultado será:

enter image description here

Solución actualizada de Swift 3.0

Insertar en la parte inferior

 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() 

Insertar en la parte superior 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()