Je suis un développeur débutant dans Swift et je crée une application de base qui comprend un UITableView. Je souhaite actualiser une certaine ligne du tableau en utilisant:
self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)
et je veux que la ligne qui sera actualisée provienne d'un Int nommé rowNumber
Le problème est que je ne sais pas comment faire cela et tous les fils que j'ai recherchés sont pour Obj-C
Des idées?
ios
uitableview
swift
nsindexpath
SentientBacon
la source
la source
Réponses:
Vous pouvez créer un en
NSIndexPath
utilisant le numéro de ligne et de section puis le recharger comme ceci:let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0) tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
Dans cet exemple, j'ai supposé que votre table n'a qu'une seule section (c'est-à-dire 0) mais vous pouvez modifier cette valeur en conséquence.
Mise à jour pour Swift 3.0:
let indexPath = IndexPath(item: rowNumber, section: 0) tableView.reloadRows(at: [indexPath], with: .top)
la source
Pour une solution d'animation à impact doux:
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)
Voici une autre façon de protéger l'application contre le plantage:
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) } }
la source
Swift 4
let indexPathRow:Int = 0 let indexPosition = IndexPath(row: indexPathRow, section: 0) tableView.reloadRows(at: [indexPosition], with: .none)
la source
Dans 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)
Par défaut, si vous n'avez qu'une seule section dans TableView, vous pouvez mettre la valeur de section 0.
la source
let indexPathRow:Int = 0 let indexPosition = IndexPath(row: indexPathRow, section: 0) tableView.reloadRows(at: [indexPosition], with: .none)
la source
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) }
la source
De plus, si vous avez des sections pour tableview, vous ne devez pas essayer de trouver toutes les lignes que vous souhaitez actualiser, vous devez utiliser des sections de rechargement. C'est un processus simple et plus équilibré:
yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)
la source
Que diriez-vous:
self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)
la source
Swift 4.1
utilisez-le lorsque vous supprimez une ligne à l'aide de 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)
la source
Je me rends compte que cette question est pour Swift, mais voici le code équivalent Xamarin de la réponse acceptée si quelqu'un est intéressé.
var indexPath = NSIndexPath.FromRowSection(rowIndex, 0); tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.Top);
la source
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()
la source