自动滚动到具有特定值的单元格

Isu*_*uru 14 scroll uitableview autoscroll ios swift

我在这个表格视图中有一个数字列表.

在此输入图像描述

如您所见,数字会重复出现.让我们将一组重复的数字视为一.所以有1组,2组等等.

我想要做的是当应用程序启动时,我需要自动滚动到指定组的开始位置.在进一步解释之前,这是我的代码到目前为止.

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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我为变量分配了值12 groupNoToScroll.这意味着当应用程序启动时,我希望将表视图自动滚动到12s组的单元格的开头.

但目前我的代码所做的是滚动到第12个单元格,而不是具有 12 的单元格.我的问题是如何检查单元格的值并滚动到我指定的数字?

rak*_*hbs 31

您可以使用查找项的索引(将是其行),然后滚动到该索引.
findfunction返回数组中特定元素的索引.

if let index = find(items, groupNoToScroll)
{
    let indexPath = NSIndexPath(forRow: index, inSection: 0)
    tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)
}
Run Code Online (Sandbox Code Playgroud)


Gef*_*ish 14

斯威夫特4:

let indexPath = IndexPath(row: row, section: section)
tableView.scrollToRow(at: indexPath, at: .top, animated: true)
Run Code Online (Sandbox Code Playgroud)

(首先,当然,您必须根据要滚动到的单元格为行和节指定值)


Har*_*cha 11

Swift 3.0

 let indexPath = NSIndexPath(forRow: 5, inSection: 0)
 tableView.scrollToRow(at: indexPath, at: .top, animated: true)
Run Code Online (Sandbox Code Playgroud)

Swift 4.0

let lastRowIndex = self.tblRequestStatus!.numberOfRows(inSection: 0) - 1
let pathToLastRow = IndexPath.init(row: lastRowIndex, section: 0)
tableView.scrollToRow(at: pathToLastRow, at: .none, animated: false)
Run Code Online (Sandbox Code Playgroud)