J'ai ajouté une barre de recherche à ma vue tabulaire et lorsque l'utilisateur effectue une recherche, je souhaite que la vue tabulaire défile jusqu'au texte que vous avez tapé.
Comment faire défiler automatiquement la vue de défilement?
C'est ce que j'ai essayé, mais j'obtiens une erreur disant qu'un Integer n'est pas convertible en un chemin d'index. Que devrais-je faire?
self.tableview.scrollToRowAtIndexPath(1, atScrollPosition: UITableViewScrollPosition.Middle, animated: true)
ou
self.tableview.scrollToNearestSelectedRowAtScrollPosition(scrollPosition: UITableViewScrollPosition.Middle, animated: true)
Vous devez appeler la méthode scrollToRowAtIndexPath
de la manière suivante:
var indexPath = NSIndexPath(forRow: numberOfRowYouWant, inSection: 0)
self.tableview.scrollToRowAtIndexPath(indexPath,
atScrollPosition: UITableViewScrollPosition.Middle, animated: true)
L'exemple ci-dessus suppose que vous n'avez qu'une seule section. J'espère que cela vous aidera.
Pour Swift 3:
let indexPath = NSIndexPath(item: numberOfRowYouWant, section: 2)
tableView.scrollToRow(at: indexPath as IndexPath, at: UITableViewScrollPosition.middle, animated: true)
Pour Swift 4:
let indexPath = NSIndexPath(item: numberOfRowYouWant, section: 2)
tableView.scrollToRow(at: indexPath as IndexPath, at: UITableView.ScrollPosition.middle, animated: true)
Pour Swift 4.2 (Xcode 12.1):
let numberOfSections = self.tableView.numberOfSections
let numberOfRows = self.tableView.numberOfRows(inSection: numberOfSections-1)
let indexPath = IndexPath(row: numberOfRows-1 , section: numberOfSections-1)
self.tableView.scrollToRow(at: indexPath, at: UITableView.ScrollPosition.middle, animated: true)
Pour Swift 2:
let numberOfSections = self.tableView.numberOfSections
let numberOfRows = self.tableView.numberOfRows(inSection: numberOfSections-1)
let indexPath = IndexPath(row: numberOfRows-1 , section: numberOfSections-1)
self.tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.middle, animated: true)
Si vous souhaitez faire défiler automatiquement:
numberOfSections = tableView.numberOfSections()
let numberOfRows = tableView.numberOfRowsInSection(numberOfSections-1)
var indexPath = NSIndexPath(forRow: numberOfRows, inSection: numberOfSections)
self.tableview.scrollToRowAtIndexPath(indexPath,
atScrollPosition: UITableViewScrollPosition.Middle, animated: true)
Swift 4:
let numberOfSections = tableView.numberOfSections
let numberOfRows = tableView.numberOfRows(inSection: numberOfSections - 1)
let indexPath = NSIndexPath(row: numberOfRows, section: numberOfSections)
self.tableView.scrollToRow(at: indexPath as IndexPath,
at: UITableView.ScrollPosition.middle, animated: true)
Voici la version Swift 2.0 pour faire défiler jusqu'à la dernière ligne de plusieurs sections, basée sur le code de Thiago plus tôt dans ce fil:
let numberOfSections = self.tableView.numberOfSections
let numberOfRows = self.tableView.numberOfRowsInSection(numberOfSections-1)
print ("scrolling to bottom row \(numberOfRows)")
let indexPath = NSIndexPath(forRow: numberOfRows-1, inSection: numberOfSections-1)
self.tableView.scrollToRowAtIndexPath(indexPath,
atScrollPosition: UITableViewScrollPosition.Middle, animated: true)
Swift 4
/* Variables */
var scrollTimer = Timer()
// AN AUTOMATIC SCROLL OF THE YOUT IMAGE
scrollTimer = Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(automaticScroll), userInfo: nil, repeats: true)
// MARK: - SCROLLVIEW DELEGATE: SHOW CURRENT PAGE IN THE PAGE CONTROL
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let pageWidth = containerScrollView.frame.size.width
let page = Int(floor((containerScrollView.contentOffset.x * 2 + pageWidth) / (pageWidth * 2)))
pageControl.currentPage = page
}
// MARK: - AUTOMATIC SCROLL
@objc func automaticScroll() {
var scroll = containerScrollView.contentOffset.x
if scroll < CGFloat(view.frame.size.width) * CGFloat(numberOfImages-1) {
scroll += CGFloat(view.frame.size.width)
containerScrollView.setContentOffset(CGPoint(x: scroll, y:0), animated: true)
} else {
// Stop the timer
scrollTimer.invalidate()
}
}