Подтвердить что ты не робот

Обновить определенную строку UITableView на основе Int в Swift

Я начинаю разработчик в Swift, и я создаю базовое приложение, которое включает UITableView. Я хочу обновить определенную строку таблицы, используя:

self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)

и я хочу, чтобы строка, которая будет обновлена, должна быть указана в строке с именем rowNumber

Проблема в том, что я не знаю, как это сделать, и все нити, которые я искал, для Obj-C

Любые идеи?

4b9b3361

Ответ 1

Вы можете создать 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)

Ответ 2

Для решения анимации с мягким воздействием:

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)
   }
}

Ответ 3

В 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.

Ответ 4

let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)

Ответ 5

Swift 4

let indexPathRow:Int = 0    
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)

Ответ 6

Как насчет:

self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)

Ответ 7

Кроме того, если у вас есть разделы для просмотра таблицы, вам не следует пытаться найти все строки, которые вы хотите обновить, вы должны использовать разделы перезагрузки. Это простой и более сбалансированный процесс:

yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)

Ответ 8

Swift 4.1

используйте его при удалении строки, используя 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)

Ответ 9

Я понимаю, что этот вопрос предназначен для Swift, но вот Xamarin эквивалентный код принятого ответа, если кто-то заинтересован.

var indexPath = NSIndexPath.FromRowSection(rowIndex, 0);
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.Top);

Ответ 10

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)
    }