Обновите определенную строку 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)