2016-04-28 10 views
0

So Einstellung Ich bin ein Layout des UITableViewCell programmatisch, wenn es ausgewählt ist:Swift - Programmatically gesetzt UITableViewCell setzt auf Scroll

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.selectedCellIndexPath = indexPath 
    var selectedCell = tableView.cellForRowAtIndexPath(indexPath)! 
    tableView.beginUpdates() 
    tableView.endUpdates() 
    var cell:SelectedPatientCell = tableView.dequeueReusableCellWithIdentifier("patient selected", forIndexPath: indexPath) as! SelectedPatientCell 
    cell.patientName.text = patients[indexPath.row].fullName 
    cell.dob.text = patients[indexPath.row].dob 
    ... 
    selectedCell = cell 
} 

Und wenn ich scrollen Sie die Tableview, das Layout der Zelle setzt auf seine ursprüngliche Layout-Set in cellForRowAtIndexPath. Die Höhe bleibt jedoch so wie sie sollte, wenn ich sie in der obigen Funktion einstelle. Kann jemand das beheben? Hier

ist ein Album, von dem, was passiert: http://imgur.com/a/OUIMJ

Bild 1: Urzustand

Bild 2: ausgewählter Zustand (wie es beim Scrollen bleiben soll)

Bild 3: Was passiert eigentlich

+0

Es ist nicht klar, was das Problem ist. Könntest du mehr darüber erklären, was du erreichen willst und was läuft falsch? Versuchen Sie, die ausgewählte Zelle zu ändern? – ocwang

+0

so hat eine Zelle zwei Zustände, nicht ausgewählt und ausgewählt. Wenn es ausgewählt ist und ich scrolle, wird es auf das ursprüngliche Layout zurückgesetzt. Ich werde sehen, ob ich einige Screenshots machen kann, um es klarer zu machen. – nerras

Antwort

0

So fand ich meine eigene Lösung: Statt

tableView.beginUpdates() 
    tableView.endUpdates() 

ich am Ende der Funktion, dies zu tun benötigt tun:

tableView.reloadData() 

und löst das Problem

1

Sie diesen Zustand in

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    if indexPath == self.selectedCellIndexPath { 
     var cell:SelectedPatientCell = tableView.dequeueReusableCellWithIdentifier("patient selected", forIndexPath: indexPath) as! SelectedPatientCell 
     cell.patientName.text = patients[indexPath.row].fullName 
     cell.dob.text = patients[indexPath.row].dob 
     return cell 
    } 
    let cell = tableView.dequeueReusableCellWithIdentifier("patient selected") as! OriCell 
    ... 
    return cell 
} 
halten sollte

auf diese Weise, wenn Sie in TableView blättern, wird die ursprüngliche Zelle nicht fortgesetzt. Hoffentlich ist es klar.

+0

erklären Sie mehr für den Benutzer mit einem Beispielmodell, damit es für jeden nützlich ist, der zu der Frage später kommt – Shubhank

+0

Ich setze meine Antwort zurück, wählen Sie sie bitte – xiaoming

+0

diese Lösung funktioniert nicht für mich – nerras

Verwandte Themen