Soy un desarrollador principiante en Swift y estoy creando una aplicación básica que incluye 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 de 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?
ios
uitableview
swift
nsindexpath
SentientBacon
fuente
fuente
Respuestas:
Puede crear un
NSIndexPath
usando el número de fila y sección y luego volver a cargarlo así:let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0) tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
En este ejemplo, asumí 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)
fuente
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)
Rápido 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0) tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
Esta es otra forma de evitar que la aplicación se bloquee:
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) } }
Rápido 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0) if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) { if visibleIndexPaths != NSNotFound { tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) } }
fuente
Rápido 4
let indexPathRow:Int = 0 let indexPosition = IndexPath(row: indexPathRow, section: 0) tableView.reloadRows(at: [indexPosition], with: .none)
fuente
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 sección 0.
fuente
let indexPathRow:Int = 0 let indexPosition = IndexPath(row: indexPathRow, section: 0) tableView.reloadRows(at: [indexPosition], with: .none)
fuente
SWIFT 4.2
func reloadYourRows(name: <anyname>) { let row = <your array name>.index(of: <name passing in>) let reloadPath = IndexPath(row: row!, section: 0) tableView.reloadRows(at: [reloadPath], with: .middle) }
fuente
Además, si tiene secciones para la vista de tabla, no debe intentar 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)
fuente
Qué tal si:
self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)
fuente
Swift 4.1
utilícelo cuando elimine la fila usando selectedTag of row.
self.tableView.beginUpdates() self.yourArray.remove(at: self.selectedTag) print(self.allGroups) let indexPath = NSIndexPath.init(row: self.selectedTag, section: 0) self.tableView.deleteRows(at: [indexPath as IndexPath], with: .automatic) self.tableView.endUpdates() self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .automatic)
fuente
Me doy cuenta de que esta pregunta es para Swift, pero aquí está el código equivalente de Xamarin de la respuesta aceptada si alguien está interesado.
var indexPath = NSIndexPath.FromRowSection(rowIndex, 0); tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.Top);
fuente
extension UITableView { /// Reloads a table view without losing track of what was selected. func reloadDataSavingSelections() { let selectedRows = indexPathsForSelectedRows reloadData() if let selectedRow = selectedRows { for indexPath in selectedRow { selectRow(at: indexPath, animated: false, scrollPosition: .none) } } } } tableView.reloadDataSavingSelections()
fuente