Я работаю над проектом, где у меня есть два UITableView
с и два UITextField
с, когда пользователь нажимает на кнопку данные в первом textField
должны идти в tableView
и второй перейдите во второй tableView
. Моя проблема в том, что я не знаю, как помещать данные в tableView
каждый раз, когда пользователь нажимает кнопку, я знаю, как вставлять данные с tableView:cellForRowAtIndexPath:
, но это работает один раз, насколько я знаю. Итак, какой метод я могу использовать для обновления tableView
каждый раз, когда пользователь нажимает кнопку?Как вставить новую ячейку в UITableView в Swift
ответ
Использование beginUpdates
и endUpdates
для вставки новой ячейки, когда кнопка нажата ..
Прежде всего добавить данные в массиве Tableview
Yourarray.append([labeltext])
Затем upate таблицу и вставить новую строку
// Update Table Data
tblname.beginUpdates()
tblname.insertRowsAtIndexPaths([
NSIndexPath(forRow: Yourarray.count-1, inSection: 0)
], withRowAnimation: .Automatic)
tblname.endUpdates()
Вставляет ячейку и не нужно перезагружать всю таблицу, но если у вас возникли проблемы с этим, вы также можете использовать tableview.reloadData()
быстры 3,0
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];
Приятно, что вы предоставили версию Objective-C. Иногда это помогает! –
@RashmiRanjanmallick ... да же я подумал и отредактировал свой ответ ... поэтому люди понимают переводы :) –
'begin/endUpdates' не влияет ни на одну операцию вставки/удаления/перемещения. – vadian
Вот код для добавления данных в обоих 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()
}
}
И ваш результат будет:
Swift 3,0 Обновлено решение
Вставка в нижней
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()
Вставить в верх 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()
Как это достигается с помощью коллекции? Я могу легко вставить несколько элементов ... но это вставка в индекс 0. Когда элемент выбран, отображается предыдущий индекс 0. – scrainie
Что вы пробовали? Вы говорите: «tableView: cellForRowAtIndexPath:» работает только «насколько известно». Почему бы не попробовать его в методе вашей кнопки? –
@Max von Hippel что я сделал: tableView берет данные из массива , поэтому, когда я добавляю элемент в массив, я использую этот метод: tableView.reloadData таким образом, когда когда-либо добавляю элемент, массив будет перейдите в «CellForRowAtIndexPath» и снова извлеките информацию из массива :) –