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;
}
Я надеюсь, что это сработает для вас.
Спасибо.