2016-04-04 24 views
0

Ich erstelle eine App, die verschiedene Zeichenketten innerhalb eines Etiketts anzeigen soll, das sich in einer UITableViewCell befindet. Ich kann indexPath.row jedoch nicht verwenden, da sich die Zeichenfolgen nicht in einer bestimmten Reihenfolge befinden.Tabellenansicht neu laden, um dynamische Etikettänderungen zu erstellen iOS Swift

let one = "This is the first quote" 
let two = "This is the second quote" 

var numberOfRows = 1 
var quoteNumber = 0 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let items = [one, two] 

    myTableView = tableView 

    let cell = tableView.dequeueReusableCellWithIdentifier("customcell", forIndexPath: indexPath) as! cellTableViewCell 
    let cellWidth = cell.frame.width 
    let cellHeight = cell.frame.height 

    cell.QuoteLabel.frame = CGRectMake(cellWidth/8, cellHeight/4, cellWidth/1.3, cellHeight/2) 

    let item = items[quoteNumber] 

    cell.QuoteLabel.text = item 
    cell.QuoteLabel.textColor = UIColor.blackColor() 
     if quoteNumber == 0 { 
      quoteNumber = 1 
     } 

    if numberOfRows == 1 { 
     numberOfRows = 2 
    } 

    return cell 

} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    var timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "update", userInfo: nil, repeats: true) 

} 
func update() { 

dispatch_async(dispatch_get_main_queue()) { 
    self.myTableView.reloadData() 
} 

Dieser Code erstellt und läuft, aber wenn der Timer I gesetzt haben abläuft und die Update-Funktion läuft, beide der zwei verfügbaren Zellen auf das gleiche Etikett ändern. Ich versuche es so zu machen, dass die erste Zelle statisch bleiben kann, während die neu hinzugefügte Zelle das neue Element aus dem 'items' -Array empfangen kann, ohne indexpath.row zu benutzen (weil die Anführungszeichen, aus denen ich werde, verwendet werden) Das Elementarray wird in keiner bestimmten Reihenfolge sein. Jede Hilfe wäre willkommen.

+0

Ihre Daten müssen in Ordnung sein. Wie sonst können Sie die Zeilen richtig anzeigen? Ihre Daten müssen von indexPath indexierbar sein. Es kommt nicht um diese Tatsache herum. – rmaddy

Antwort

1

Anstatt reloadData versuchen Sie reloadRowsAtIndexPaths: und übergeben Sie die Zeilen, die Sie neu laden möchten. Dies verwendet jedoch indexPath. Die einzige Möglichkeit, bestimmte Zeilen im Gegensatz zur gesamten TableView neu zu laden, besteht darin, die Zeilen nach Indexpfad anzugeben.

+0

Ich habe versucht, das zu verwenden, jedoch stürzt es mit einer Fehlermeldung ab, die besagt, dass die zweite Zeile, die ich ändern möchte, nicht existiert. Meine Vermutung ist, dass ich es vor dem Update erstellen müsste, aber ich möchte nicht, dass die zweite Zeile mit den Daten der ersten Zeile gefüllt wird ... Alle Vorschläge @ Hash88 –

+0

was Sie von 'tableView: numberOfRowsInSection:' zurückgeben ? Wenn dieser Wert "1" ist, hat Ihre Tabellenansicht nur eine Zelle. – Hash88

+0

Mit 'UITableView' erstellen Sie nicht wirklich Zellen. Sie sollten angeben, wie viele Abschnitte & Zeilen Sie in 'numberOfSectionsInTableView:' und 'tableView: numberOfRowsInSection:' haben möchten, dann in 'tableView: cellForRowAtIndexPath:' Sie erstellen (oder wiederverwenden) jede Zelle, aber die Anzahl der Zellen nicht dort angegeben. – Hash88

Verwandte Themen