UITableView indexPath последней строки

Я пытаюсь сделать последнюю строку в UITableView видно, после того, как он был добавлен. Прямо сейчас, когда я добавляю строку и вызываю reloadData, таблица идет наверх.

Я думаю, если я получаю indexPath для последней строки я могу выбрать эту строку, и она должна появиться в списке. Я не уверен, как получить это значение, или даже если я правильно подхожу к этому.

как мне получить indexPath для определенной строки?

5 ответов


обратите внимание, что вам не нужно звонить в reloadData чтобы сделать последнюю строку видимой. Вы можете использовать scrollToRowAtIndexPath метод.

вы можете использовать приведенный ниже код для достижения своей цели.

// First figure out how many sections there are
let lastSectionIndex = self.tblTableView!.numberOfSections() - 1

// Then grab the number of rows in the last section
let lastRowIndex = self.tblTableView!.numberOfRowsInSection(lastSectionIndex) - 1

// Now just construct the index path
let pathToLastRow = NSIndexPath(forRow: lastRowIndex, inSection: lastSectionIndex)

// Make the last row visible
self.tblTableView?.scrollToRowAtIndexPath(pathToLastRow, atScrollPosition: UITableViewScrollPosition.None, animated: true)

Swift 4.0:

tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.none, animated: true)

вы можете использовать scrollToRowAtIndexPath с расширением:

В Swift 3:

extension UITableView {
    func scrollToLastCell(animated : Bool) {
        let lastSectionIndex = self.numberOfSections - 1 // last section
        let lastRowIndex = self.numberOfRows(inSection: lastSectionIndex) - 1 // last row
        self.scrollToRow(at: IndexPath(row: lastRowIndex, section: lastSectionIndex), at: .Bottom, animated: animated)
    }
}

Как полагают другие получить indexPath для разделов определенным как раздел 0.

после этого звонка...добавить МИТОС в cellFOrROwAtIndex

[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; ..для прокрутки до определенного indexPath в TableView.

Примечание: - но ему все еще нужна прокрутка tableview в направлении вниз.


вы не должны использовать -reloadData для этого случая использования. То, что вы ищете-это -insertRowsAtIndexPaths:withRowAnimation:.

не стесняйтесь спросить, если вы хотите некоторые примеры использования или более подробное объяснение, почему с помощью -reloadData отправить вас на вершину UITableView.


Не обязательно требуется, чтобы получить indexpath последней строки.
Вы можете установить CGPoint UITableview для отображения последней добавленной строки.
Я всегда использую этот код в моем приложении чат показывать последние сообщения.

//Declaration
@IBOutlet weak var tableview: UITableView!

//Add this executable code after you add this message.
var tblframe: CGRect = tableview.frame
tblframe.size.height = self.view.frame.origin.y
tableview.frame = tblframe
var bottomoffset: CGPoint = CGPointMake(0, tableview.contentSize.height - tableview.bounds.size.height)
if bottomoffset.y > 0 {
    tableview.contentOffset = bottomoffset;
}

Я надеюсь, что это сработает для вас.
Спасибо.