2015-07-03 3 views
2

Я развиваю ленту новостей, и я использую uitableview для отображения данных. Я загрузке каждой ячейки данных синхронически в другой нити и протокольной использование метода для отображения загруженных данных:Случайная прокрутка при перезагрузке uitableviewcell, iOs/Swift

func nodeLoaded(node: NSMutableDictionary) { 
    for var i = 0; i < nodesArray.count; ++i { 
     if ((nodesArray[i]["id"] as! Int) == (node["id"] as! Int)) { 
      nodesArray[i] = node 
      CATransaction.setDisableActions(true) 
      self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 
      CATransaction.setDisableActions(false) 
     } 
    } 
} 

Проблема заключается в том, что, когда я прокрутки вниз (при обновлении Tableview), TableView толкнуть меня на вершине. Я искал ответ на эту проблему, но мне ничего не помогает. Я уже пытался отключить анимацию:

  CATransaction.setDisableActions(true) 
      self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 
      CATransaction.setDisableActions(false) 

2)

  UIView.setAnimationsEnabled(false) 
      self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 
      UIView.setAnimationsEnabled(true) 

Но история всегда одинакова. У меня есть желаемый эффект, когда я просто не использую self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) , но в этом случае данные перезагружаются, только если я прокручу вниз и вернусь обратно в ячейку.

Возможно, проблема в том, что я использую автоматическую компоновку, а tableview пересчитывает ее высоту каждый раз? Но я не знаю, как это исправить.

+0

Я хочу понять, почему вы не хотите анимацию. Слайд в анимации, когда ячейки сообщают пользователю, что что-то прибыло или ушло. Если вы действительно не хотите анимации и хотите остановить случайную прокрутку, попробуйте это: tableView.reloadSections (NSIndexSet (индекс: 0), withRowAnimation: UITableViewRowAnimation.None) ', и если вы хотите, чтобы анимация изменила значение None на что-то другое из перечисление. –

+0

Ой, я думал, что случайная прокрутка запускает bcs анимации. Я попробовал reloadSections, но id не помог = ( – Maxim

+0

Что вы сделали, чтобы исправить? – shinoys222

ответ

0

Вы можете самостоятельно создать механизм перезагрузки.

Итерации по всем видимым клеткам (tableView.visibleCells) и применять к ним ту же логику, что и в -tableView:cellForRowAtIndexPath:.

Если вам требуется указательный путь для выполнения этого обновления, вы можете запросить его в виде таблицы (-indexPathForCell:).

+0

Итак, если я изменю свою видимую ячейку следующим образом: cell.label.text = "new", то информация в uitableview будет обновляться? попробовал, и он не работает, mb Я делаю что-то не так – Maxim

+0

В чем «информация» в 'UITableView' вы говорите? –

+0

Выполняете обновление в главной очереди? Попробуйте сделать это вместо' dispatch_async (dispatch_get_main_queue(), {cell .label.text = "новый"}) ' –