2017-08-19 5 views
1

Ich befülle eine Tabellenansicht mit Elementen in einer Liste, und wenn ich mehrere Elemente zur Tabellenansicht hinzufüge, sind alle Zellen außer der ersten leer. Und wenn ich die Zelle am untersten Ende des Bildschirms lösche, legt sie die Daten von dieser Zelle in die nächste Zelle nach oben. Ich bin mir nicht sicher, was ich falsch gemacht habe, aber hier ist mein Code, wenn jemand helfen kann.Popup-Tabellenansicht Zellen erstellt leere Zellen

import UIKit 

// Initialize the list that populates the each cell in the table view 
var list = [AnyObject]() 
let cell = UITableViewCell(style: UITableViewCellStyle.default, 
reuseIdentifier: "cell") 

class FirstViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource { 



@IBOutlet weak var myTableView: UITableView! 



// Declares how many rows the table view will have 
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return (list.count) 
} 

// Populates each table view cell with items from each index in the list 
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 

//  let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") 
//  cell.accessoryType = .checkmark 
//  cell.textLabel?.textAlignment = .natural 

    // The text of the cell = the data of index that matches the index of the cell 
    cell.textLabel?.text = list[indexPath.row] as? String 

    // Sets the background color of the cell 
//  cell.backgroundColor = UIColor.clear 

    return cell 
} 

// Allows user to remove item from table view by swiping left 
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) 
{ 
    // if the user swiped left to delete an item from the table view 
    if editingStyle == UITableViewCellEditingStyle.delete 
    { 
     // remove the deleted item from the list and reload the data 
     list.remove(at: indexPath.row) 
     myTableView.reloadData() 
    } 
} 
+1

Sie Sie müssen eine von tausend Tabellenansicht - Tutorials finden und sich die richtige Weise, um eine Zelle von der 'cellForRowAt'-Methode bereitzustellen. – rmaddy

+0

@maddy Das ist, was ich versuche herauszufinden. Ich habe mir mehrere Tutorials angeschaut. Wenn Sie einen Einblick geben könnten, was ich mit meiner cellForRowAt-Methode falsch gemacht habe, wäre das hilfreich. – infiltratingtree

Antwort

0

Sie vermissen eine Menge Dinge. Zuerst müssen Sie die datasource und delegate von MytableView auf Selbst festlegen. Außerdem müssen Sie das Array list in viewDidLoad oder eine solche Methode initialisieren, die zur Laufzeit aufgerufen wird. Und sobald das Listen-Array initialisiert wird. Dann müssen Sie myTableView.reloadData() anrufen. Schließlich Ihre cellForRow sollte wie folgt aussehen:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) 
    cell.textLabel?.text = list[indexPath.row] as? String 
    return cell 
} 
+0

Nun, ich initialisierte die Liste außerhalb der Klasse, weil ich in einem anderen View-Controller darauf zugreifen musste. Dasselbe gilt für die Zeile "let cell = ...". Gibt es einen besseren Weg, das zu tun? – infiltratingtree

+0

Sie haben die Liste nur als AnyObject deklariert, aber nicht mit Werten initialisiert. Nachdem Sie das Array initialisiert haben, müssen Sie die Liste aufrufen. Versuchen Sie, die Werte in der Liste auszudrucken. –

+0

Ich initialisierte die Liste mit AnyObject, weil ich eine leere Liste wollte, die nur Elemente enthalten würde, die vom Benutzer hinzugefügt wurden, insbesondere Strings. Was bewirkt das Festlegen der Datenquelle und des Delegaten der Tabellenansicht für sich selbst? Tut mir leid, ich bin ziemlich neu in diesem Zeug. – infiltratingtree

0

Schritt I: - Gehen Sie zu Ihrem storyboard.Select FirstViewController Szene, wählen myTableView. Wählen Sie nun den Attributinspektor set "Prototypzelle" Wert = 1

Erweitern Sie nun "myTableView" und wählen Sie "Zelle". Wählen Sie erneut den Attributinspektor Set Identifier Wert "Zelle". Jetzt haben Sie Storyboard gemacht. Zum FirstViewController und fügen Sie den Code unten

OR

einfach das unten stehende Zeile in viewDidLoad einfügen()

myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 

Beide

gleich sind
import UIKit 

class FirstViewController: UIViewController,UITableViewDelegate, 
UITableViewDataSource { 

@IBOutlet weak var myTableView: UITableView! 
var list = ["A", "B", "C","A", "B", "f"] 

override func viewDidLoad() { 
    super.viewDidLoad() 
    myTableView.dataSource = self 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return (list.count) 
} 

// Populates each table view cell with items from each index in the list 
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 

    //  let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") 
    //  cell.accessoryType = .checkmark 
    //  cell.textLabel?.textAlignment = .natural 

    // The text of the cell = the data of index that matches the index of the cell 
    let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
    cell.textLabel?.text = list[indexPath.row] 

    // Sets the background color of the cell 
    //  cell.backgroundColor = UIColor.clear 

    return cell 
} 

// Allows user to remove item from table view by swiping left 
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) 
{ 
    // if the user swiped left to delete an item from the table view 
    if editingStyle == UITableViewCellEditingStyle.delete 
    { 
     // remove the deleted item from the list and reload the data 
     list.remove(at: indexPath.row) 
     myTableView.reloadData() 
    } 
} 

}

+0

Sie haben keine Datenquelle hinzugefügt, myTableView.dataSource = self. Aber nachdem wir die Datenquelle nur mit unserem vorherigen Code hinzugefügt haben, erhalten Sie nur eine einzelne Zeile mit dem letzten Wert der Liste. Hoffe das wird dir definitiv helfen –