Моя UITableView
прокручивается, как только я добавляю новый комментарий к CoreData. NSFetchedResultsController знает об этом, помещает этот комментарий в нижней части таблицы и прокручивает таблицу вверх. Это нормально?Как предотвратить прокрутку UITableView, когда NSFetchedResultsController добавляет новую запись?
Мой пример:
Просто, прежде чем я добавить комментарий
Только после того, как я добавить комментарий (не ожидаемое поведение):
Он должен быть таким же (после того, как я проведу его вручную вручную):
Это может быть связано с следующей ситуацией:
Это своего рода дескриптор моего
NSFetchedResultsController
:NSSortDescriptor(key: "createdAt", ascending: false) //from the latest to the oldest
Но мне нужно, чтобы отобразить мои комментарии для обратных указательных путей (последние находятся в самом низу). Другими словами, везде, когда мне нужно использовать
indexPath
я использую:private func reversedIndexPathForIndexPath(indexPath: NSIndexPath) -> NSIndexPath { return NSIndexPath(forRow: fetchedResultsController.fetchedObjects!.count - indexPath.row - 1, inSection: 0) }
NSFetchedResultsControllerDelegate
:
//MARK: - NSFetchedResultsControllerDelegate
func controllerWillChangeContent(controller: NSFetchedResultsController) {
self.tableView.beginUpdates()
}
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case .Insert:
if let newIndexPath = newIndexPath {
tableView.insertRowsAtIndexPaths([reversedIndexPathForIndexPath(newIndexPath)], withRowAnimation: .Fade)
}
case .Delete:
if let indexPath = indexPath {
tableView.deleteRowsAtIndexPaths([reversedIndexPathForIndexPath(indexPath)], withRowAnimation: .Fade)
}
case .Update:
if let indexPath = indexPath {
tableView.reloadRowsAtIndexPaths([reversedIndexPathForIndexPath(indexPath)], withRowAnimation: .Fade)
}
case .Move:
if let indexPath = indexPath, let newIndexPath = newIndexPath {
tableView.deleteRowsAtIndexPaths([reversedIndexPathForIndexPath(indexPath)], withRowAnimation: .Fade)
tableView.insertRowsAtIndexPaths([reversedIndexPathForIndexPath(newIndexPath)], withRowAnimation: .Fade)
}
}
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.endUpdates()
}
ли это связано с моей проблемой?
просто отключить Tableview перед добавлением новой записи –
@PiyushPatel 'self.tableView. scrollEnabled = false', все еще перемещается в начало –
Использование: tableView.alwaysBounceVertical = NO. –