Обновите определенную строку UITableView на основе Int в Swift
Я начинающий разработчик в Swift, и я создаю базовое приложение, которое включает UITableView. Я хочу обновить определенную строку таблицы, используя:
self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)
и я хочу, чтобы строка, которая будет обновлена, была из Int с именем rowNumber
проблема в том, что я не знаю, как это сделать, и все потоки, которые я искал, для Obj-C
какие идеи?
7 ответов
вы можете создать NSIndexPath
используя номер строки и раздела, затем перезагрузите его следующим образом:
let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
в этом примере я предположил, что ваша таблица имеет только один раздел (т. е. 0), но вы можете изменить это значение соответственно.
обновление для Swift 3.0:
let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
для решения мягкой анимации воздействия:
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)
это еще один способ защитить приложение от сбой:
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)
}
}
В 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)
byDefault, если у вас есть только один раздел в TableView, то вы можете поместить значение раздела 0.
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
Swift 4
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
Как насчет:
self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)
кроме того, если у вас есть разделы для tableview вы не должны пытаться найти все строки, которые хотите обновить, вы должны использовать разделы перезагрузки. Это простой и более сбалансированный процесс:
yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)