无法滚动到tableView中节的行

时间:2018-12-11 12:42:03

标签: swift uitableview scroll

我想要的是在调用viewDidAppear时滚动到tableView中某个部分的行。 我创建了这个简单的应用程序进行测试。我试图弄清楚为什么在尝试使用scrollToRow时崩溃。它在AppDelegate中崩溃----错误线程1:信号SIGABRT

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    let tableView = UITableView()
    let section = 2
    let row = 3

    let data = ["Cat", "Dog",  "Bird",  "Cow",  "Owl",  "Deer",  "Rabbit",  "Bull", ]


    @IBOutlet weak var myTable: UITableView!

    override func viewDidAppear(_ animated: Bool) {

        // Crash in AppDelegate ---- Error Thread 1: signal SIGABRT
        tableView.scrollToRow(at: IndexPath(row: row, section: section), at: UITableView.ScrollPosition.top, animated: true)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return data.count
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel!.text = data[indexPath.row]

        return cell
    }

}

2 个答案:

答案 0 :(得分:1)

您要使用IBOutlet myTable,而不要使用变量tableView。因此,当您滚动到特定行时,将代码中的tableView替换为myTable

myTable.scrollToRow(at: IndexPath(row: row, section: section), at: .top, animated: true)

以及cellForRowAt数据源方法

let cell = myTable.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

接下来,我在您的代码中看不到您设置了myTable的委托和数据源。所以解决它:

override func viewDidLoad() {
    super.viewDidLoad()
    myTable.delegate = self
    myTable.dataSource = self
}

答案 1 :(得分:0)

您说let tableView = UITableView(),但是从不配置它。实际上,您可以删除此变量,因为有了IBOutlet后就不需要它了。因此,您应该像这样使用TableView中的IBOutlet

self.myTable.scrollToRow(at: IndexPath(row: self.row, section: self.section), at: UITableView.ScrollPosition.top, animated: true)

而您忘记设置TableView的Delegate和DataSource。为此:

override func viewDidAppear(_ animated: Bool) {

    self.myTable.delegate = self
    self.myTable.dataSource = self
}

注意::您必须确保第3行和第2部分存在!