2015-03-31 19 views
17

Ich habe eine Suchleiste zu meiner Tabellenansicht hinzugefügt, und während der Benutzer sucht, möchte ich, dass die Tabellenansicht zu dem Text blättert, den Sie eingegeben haben.Wie scrolle ich automatisch in einer Tabellenansicht? (Swift)

Wie kann ich die Bildlaufansicht automatisch scrollen lassen?

Dies ist, was ich versucht habe, aber ich bekomme einen Fehler, der besagt, dass ein Integer nicht in einen Indexpfad konvertiert werden kann. Was soll ich machen?

self.tableview.scrollToRowAtIndexPath(1, atScrollPosition: UITableViewScrollPosition.Middle, animated: true) 

oder

self.tableview.scrollToNearestSelectedRowAtScrollPosition(scrollPosition: UITableViewScrollPosition.Middle, animated: true) 

Antwort

26

Sie haben die Methode scrollToRowAtIndexPath auf folgende Weise zu nennen:

var indexPath = NSIndexPath(forRow: numberOfRowYouWant, inSection: 0) 
self.tableview.scrollToRowAtIndexPath(indexPath, 
       atScrollPosition: UITableViewScrollPosition.Middle, animated: true) 

Das obige Beispiel annehmen, dass Sie nur einen Abschnitt haben. Ich hoffe das hilft dir.

Für Swift 3:

let indexPath = NSIndexPath(item: numberOfRowYouWant, section: 2) 
tableView.scrollToRow(at: indexPath as IndexPath, at: UITableViewScrollPosition.middle, animated: true) 
+1

, wenn Sie eine Suchleiste havent, nur eine normale Tabelle: nennen es in viewDidAppear(), und Sie haben eine schöne Animation, viewDidload hat auch für mich funktioniert, aber ohne Animation – kuzdu

+0

funktioniert es gut, danke für die passende Antwort. – Gaurav

5

Wenn Sie bewegen sich automatisch ab:

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) 
+0

Obwohl der Code geschätzt wird, sollte er immer eine begleitende Erklärung haben. Das muss nicht lange dauern, aber es wird erwartet. – peterh

+0

Vielen Dank für die Freigabe des Codes! Ich habe darauf verwiesen, um eine aktualisierte Version für Swift 2.0 zu erstellen. – xke

+0

Danke, es hilft mir sehr! – javimuu

3

Hier ist der Swift 2.0-Version in die letzte Zeile von mehreren Abschnitten zu bewegen, basierend auf dem Code von Thiago früher in diesem Thema:

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

Für Swift 3 (Xcode 8.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: UITableViewScrollPosition.middle, animated: true) 
0

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

Swift 4:

let indexPath = IndexPath(row: numberOfRowYouWant, section: 0) 

self.verbsTable.scrollToRow(at: indexPath, at: UITableViewScrollPosition.middle, animated: true) 
+0

Sie sollten Ihren Code formatieren. – Nikolaus

Verwandte Themen