Auto-scrollen, um eine Zelle mit einem bestimmten Wert

Habe ich eine Liste von zahlen in einer Tabelle anzeigen, wie diese.

Auto-scrollen, um eine Zelle mit einem bestimmten Wert

Wie Sie sehen können die zahlen wiederholt werden. Wir betrachten eine Reihe von wiederholten zahlen als Gruppe. Also es gibt Gruppe 1, Gruppe 2 und so weiter.

Was ich will zu tun ist, wenn die app gestartet wird, muss ich scrollen, um die start-position einer bestimmten Gruppe automatisch. Bevor wir weiter, hier ist mein code bisher.

import UIKit

class TableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {

    private var scrollToTime = true
    private var items = [Int]()
    private var groupNoToScroll = 12

    override func viewDidLoad() {
        super.viewDidLoad()

        items = [1, 1, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20, 21, 22, 22, 23, 23, 23]
    }

    //MARK: - UITableViewDataSource
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
        cell.textLabel?.text = String(items[indexPath.row])

        return cell
    }

    //MARK: - UITableViewDelegate
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

        let lastRow = tableView.indexPathsForVisibleRows()?.last as NSIndexPath
        if indexPath.row == lastRow.row {
            if scrollToTime == true {
                let indexPath = NSIndexPath(forRow: groupNoToScroll, inSection: 0)
                tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)
                scrollToTime = false
            }
        }
    }
}

Habe ich zugewiesen, der Wert 12 für die variable groupNoToScroll. Dies bedeutet, wenn die app startet, möchte ich die Tabelle anzeigen werden automatisch gescrollt, um den start in die Zellen des 12s-Gruppe.

Aber derzeit, was mein code tut, ist navigieren Sie zu dem 12-Zelle nicht die Zelle, die die Wert 12. Meine Frage ist wie kann ich überprüfen, mit der Zellen-Werte und Blättern Sie zu der Nummer, die ich angeben?

  • Haben Sie eine Iteration durch das array und um den index der erste Auftritt von groupNoToScroll.
  • Es ist jedoch in der Regel nicht eine gute Idee, überschreiben tableView:willDisplayCell: . Was sind Sie wirklich an?
  • Ich wollte den automatischen Bildlauf nach alle Zellen geladen wurden. Also laut dieser Antwort willDIsplayCell ist, wo ich brauche, um zu überprüfen, dass. Gibt es einen besseren Weg zu gehen über diese?
  • Keine willDisplayCell ist dafür nicht konstruiert. Sie riskieren eine Endlosschleife. Ich würde nur einen Bildlauf zu der zugehörigen Zelle in viewDidLoad mithilfe scrollToRowAtIndexPath. Funktioniert einwandfrei. Ich wusste, dass eine Menge.
InformationsquelleAutor Isuru | 2015-01-20
Schreibe einen Kommentar