ios - tutorial - uitableviewcell
Actualice cierta fila de UITableView basada en Int en Swift (7)
Soy un desarrollador principiante en Swift y estoy creando una aplicación básica que incluye una UITableView. Quiero actualizar una cierta fila de la tabla usando:
self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)
y quiero que la fila que se actualizará sea desde un Int llamado rowNumber
El problema es que no sé cómo hacer esto y todos los hilos que he buscado son para Obj-C
¿Algunas ideas?
Además, si tiene secciones para tabla vista, no debe tratar de encontrar todas las filas que desea actualizar, debe usar las secciones de recarga. Es un proceso fácil y más equilibrado:
yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)
Para una solución de animación de impacto suave:
Swift 3:
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
Swift 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
Esta es otra forma de proteger la aplicación de colisiones:
Swift 3:
let indexPath = IndexPath(item: row, section: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.index(of: indexPath as IndexPath) {
if visibleIndexPaths != NSNotFound {
tableView.reloadRows(at: [indexPath], with: .fade)
}
}
Swift 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
if visibleIndexPaths != NSNotFound {
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
Puede crear un NSIndexPath
usando la fila y el número de sección, luego vuelva a cargarlo de la siguiente manera:
let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
En este ejemplo, he supuesto que su tabla solo tiene una sección (es decir, 0) pero puede cambiar ese valor en consecuencia.
Actualización para Swift 3.0:
let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
Qué tal si:
self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)
En Swift 3.0
let rowNumber: Int = 2
let sectionNumber: Int = 0
let indexPath = IndexPath(item: rowNumber, section: sectionNumber)
self.tableView.reloadRows(at: [indexPath], with: .automatic)
Por defecto, si solo tiene una sección en TableView, puede poner el valor de la sección 0.
Swift 4
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)