2017-11-05 1 views
-3

Ich möchte dynamisch Tabellenansicht mit mehreren Zeilen erstellen, die verschiedene Daten enthält. Ich weiß nicht, wie man eine neue Zeile in swift erstellt. Ich möchte 3 Zeilen erstellen und jeder Zeile unterschiedliche Daten hinzufügen. Ich weiß, dass ich Array-Daten aktualisieren und Tabellenansicht neu laden kann. Aber wenn ich Daten in Schleife und reloaded Tabellenansicht aktualisiert, werden nur letzte Daten angezeigt. Tableview fehlenden Daten, die bei Index für Schleife hinzugefügt wird in 2. Dies ist mein Code:Wie erstellt man eine dynamische Tabellenansicht mit mehreren Zeilen in swift?

var i = 0

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    tableView.frame = CGRect(x: 5, y:200 ,width: self.view.frame.width, height: 400) 
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 
    tableView.delegate = self 
    tableView.dataSource = self 
    tableView.layer.borderWidth = 2 

    self.view.addSubview(tableView) 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return products.count 
} 
func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 


    let tf = UITextField(frame: CGRect(x: 320, y: 10*i , width: 300, height:20)) 
    tf.placeholder = "_" 
    tf.tag = indexPath.row 
    tf.font = UIFont.systemFont(ofSize: 15) 

    let pest = UILabel(frame: CGRect(x: 10, y: 10*i, width: 300, height: 60)) 

    pest.font = UIFont.systemFont(ofSize: 15) 
    pest.numberOfLines = 0 
    pest.text = self.products[indexPath.row] 

    let pp = UILabel() 
    pp.text = "PP" 


    cell.contentView.addSubview(pest) 
    cell.contentView.addSubview(tf) 



    return cell 

} 
override func viewDidAppear(_ animated: Bool) { 


    createTable() 
} 

    func createTable(){ 
    for index in 1...3{ 
     if(index == 2){ 
      i = index 
      self.products = ["r1","r2","r3","r4"] 
      tableView.reloadData() 


     } 
     else if(index == 3){ 

      i = index 
      self.products = ["d1","d2","d3","d4"] 
      tableView.reloadData() 

     } 
     else{ 

     } 

    } 
} 

enter image description here

Antwort

0

Wenn Sie Ihre Daten in products aktualisieren, können Sie anrufen tableView.reloadData(), die alle Ihre TableView-Funktionen erneut aufruft. Angenommen, Sie haben diese Einstellungen so festgelegt, dass sie widerspiegeln, was Sie möchten. Dies sollte eine neue Zeile erstellen.

+0

Ich möchte Daten in Produkten zweimal aktualisieren. Aber wenn ich meine Daten zweimal aktualisiert habe und tableView.ReloadData() aufgerufen hat, werden nur die letzten Daten angezeigt. Erste Daten erscheinen nicht in der Tabelle. – Abhishek

+0

Wollen Sie sagen, dass die Update-Daten in 'products' nicht in Ihrer TableView nach dem Aufruf von' reloadData() 'erscheinen? – LFHS

+0

self.products = ["d1", "d2", "d3", "d4"] erscheint in der Tabellenansicht. Aber self.products = ["r1", "r2", "r3", "r4"] erscheint nicht in der Tabellenansicht. – Abhishek

Verwandte Themen