pods library eureka custom best awesome ios swift uitableview

ios - library - Volver a cargar la sección de TableView sin volver a cargar la sección del encabezado-Swift



swift libraries (4)

Estoy intentando recargar la sección tableView en lugar de recargar toda la tableview porque tengo un campo de texto en la sección del encabezado y cuando llamo self.tableView.reloadData() mi teclado se cierra.

He intentado el código a continuación, pero recibo este error. Terminating app due to uncaught exception ''NSInternalInconsistencyException'', reason: ''attempt to delete row 5 from section 2 which only contains 4 rows before the update'' Entonces, ¿dónde estaría mi problema?

let newCount = self.placeArray.count var newIndexPaths = NSMutableArray(capacity: newCount) for var i = 0 ; i < newCount ; i++ { var indexPath = NSIndexPath(forRow: i, inSection: 2) newIndexPaths.addObject(indexPath) } self.tableView.beginUpdates() self.tableView.reloadRowsAtIndexPaths(newIndexPaths as [AnyObject], withRowAnimation: UITableViewRowAnimation.None) self.tableView.endUpdates()


Podrías usar el método reloadSections lugar.

tableView.reloadSections(NSIndexSet(index: 2), withRowAnimation: .None)


Swift 3.1 Xcode 8.3.3 Respuesta :)

El problema es que cada sección incluye encabezado, por supuesto, por lo que la sección es:

sección = encabezado + pie de página + filas

La respuesta es: recargar filas directamente por IndexPath. Ejemplo:

  1. Digamos que tienes 1 sección en tu tabla y ''matriz'' de algo que usas como fuente de datos para la tabla:

    let indexes = (0..<array.count).map { IndexPath(row: $0, section: 0) }

  2. Ahora tenemos una matriz de índices de celda que queremos recargar, así que:

    tableView.reloadRows(at: indexes, with: .fade)


No sé por qué las respuestas incorrectas consiguen tantos votos positivos.

Nota:

  • UITableView.reloadData() recargará toda la tabla. Docs sobre reloaddata

    vuelva a cargar todos los datos que se utilizan para construir la tabla, incluidas las celdas, los encabezados y pies de página, las matrices de índices, etc. Para mayor eficiencia, la vista de tabla vuelve a mostrar solo las filas que son visibles. Ajusta las compensaciones si la tabla se encoge como resultado de la recarga. El delegado de la vista de tabla o el origen de datos llama a este método cuando desea que la vista de tabla vuelva a cargar completamente sus datos.

  • UITableView.reloadSections(_ sections: IndexSet, with animation: UITableViewRowAnimation) volverá a cargar la sección específica ( incluido el encabezado de la sección y el pie de página ). Docs sobre recargas

  • UITableView.reloadRows(at indexPaths: [IndexPath], with animation: UITableViewRowAnimation) volverá a cargar las filas especificadas. Docs sobre reloadRows

Así que aquí reloadSections no funcionará aquí. Si los datos y el estado de su sección de encabezado no cambian, llame a este método para que no se vea afectado.

Solución: use reloadRows para cargar las filas de todas las secciones o de la sección específica. Nota: aquí solo puede cargar las filas visibles, otras se cargarán cuando desplace la vista. También puede consultar Obtener todas las rutas de índice en una sección para obtener más soluciones.

var indexPaths = self.tableView.indexPathsForVisibleRows /* just roload visible rows of specified section indexPaths = indexPaths.filter({ (indexPath) -> Bool in return indexPath.section == SECTION_INDEX_NEED_TO_RELOAD }) */ self.tableView.reloadRows(at: indexPaths!, with: .none)


Swift 3.0.1:

let sectionIndex = IndexSet(integer: 0) tableView.reloadSections(sectionIndex, with: .none) // or fade, right, left, top, bottom, none, middle, automatic