2016-04-28 2 views
0

Так я устанавливаю макет UITableViewCell в программно, когда он выбран:Swift - Программный набор UITableViewCell сбрасывает на свитке

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 
} 

И когда я прокручивать Tableview, расположение клеток возвратов к исходному набору макета в cellForRowAtIndexPath. Тем не менее, высота остается такой, какая она есть, когда я устанавливаю ее в функции выше. Кто-нибудь знает, как это исправить?

Вот альбом, что происходит: http://imgur.com/a/OUIMJ

Изображение 1: исходное состояние

Изображение 2: выбранное состояние (как это должно остаться на прокрутке)

Image 3: то, что происходит на самом деле

+0

Пришло неясно, в чем проблема. Не могли бы вы объяснить больше о том, что вы пытаетесь выполнить, и что происходит не так? Вы пытаетесь изменить ячейку после ее выбора? – ocwang

+0

, поэтому ячейка имеет два состояния, не выбраны и выбраны. когда он выбран и я прокручиваю, он сбрасывается до исходного макета. я увижу, могу ли я сделать несколько снимков экрана, чтобы сделать его более понятным. – nerras

ответ

0

Так что я нашел свое собственное решение: Вместо того чтобы делать

tableView.beginUpdates() 
    tableView.endUpdates() 

мне нужно сделать это в конце функции:

tableView.reloadData() 

и что решает проблему

1

вы должны держать это состояние в

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 
} 

таким образом, если вы прокрутите таблицуView, она не будет возвращаться к исходной ячейке. Надеюсь, это ясно.

+0

действительно объясняйте больше для пользователя с образцовой моделью, так что это полезно для всех, кто приходит к вопросу позже на – Shubhank

+0

. Я сбрасываю свой ответ, пожалуйста, выберите его – xiaoming

+0

Это решение не работает для меня – nerras

Смежные вопросы