Невозможно прокрутить строку раздела в табличном представлении. - PullRequest
0 голосов
/ 11 декабря 2018

что мне нужно, это прокрутить строку в разделе в tableView, когда вызывается viewDidAppear.Я создал это простое приложение для тестирования.Я пытаюсь выяснить, почему происходит сбой при попытке использовать 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 голосов
/ 11 декабря 2018

Вы говорите let tableView = UITableView(), но никогда не настраиваете его.Вы можете удалить эту переменную, потому что она вам не нужна, поскольку у вас есть IBOutlet.Вот почему вы должны использовать ваш TableView из IBOutlet следующим образом:

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

И вы забыли установить делегат и источник данных вашего TableView.Для этого:

override func viewDidAppear(_ animated: Bool) {

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

ПРИМЕЧАНИЕ: Необходимо убедиться, что строка 3 и раздел 2 существуют!

0 голосов
/ 11 декабря 2018

Вы хотите использовать 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
}
...