Обновить данные ячейки TableView - PullRequest
0 голосов
/ 09 ноября 2019

Я новичок в Swift / Xcode и столкнулся с проблемой при обновлении данных ячейки TableView. Кажется, я не могу найти / реализовать ответ на эту простую вещь из каких-либо подобных вопросов StackOverflow.

У меня есть приложение, которое начинает делать вызов API каждые 1 секунду по таймеру после нажатия кнопки. но проблема в том, что когда все данные табличного представления загружаются из массива с viewDidLoad(), очевидно, что нет никаких данных для отображения в метке, поскольку еще не было сделано никакого вызова.

Как только я нажимаю кнопку, данные начинают течь, но на этикетке ничего не появляется. Я считаю, что это потому, что метка должна обновляться при каждом вызове, чтобы отобразить новые данные.

Данные также являются NSAttributedString из HTML. Не уверен, что это уместно, хотя, как кажется, он отлично работает в тестовой ячейке за пределами табличного представления.

По сути, я хочу как-то вызвать

    cell.cellLabelTwo.attributedText = tableData[indexPath.row].secondRowLabel

из кода, показанного нижекаждый раз, когда делается новый вызов API, обновите cellLabelTwo новыми данными% усиления.

struct MyData {
    var imageRow: UIImage
    var firstRowLabel: String
    var secondRowLabel: NSAttributedString
}

var tableData: [MyData] = []

override func viewDidLoad() {
    super.viewDidLoad()

    tableData = [
        MyData(imageRow: UIImage(named: "ada.png")!, firstRowLabel: "ADA/USDT", secondRowLabel: adaPercentGainString.htmlToAttributedString!)
    ]

}


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


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "protoCellOne") as! TableViewCell

    cell.cellImageOne.image = tableData[indexPath.row].imageRow
    cell.cellLabelOne.text = tableData[indexPath.row].firstRowLabel
    cell.cellLabelTwo.attributedText = tableData[indexPath.row].secondRowLabel
    cell.cellLabelTwo.font = UIFont(name: "Helvetica Neue", size: 19)
    cell.cellLabelTwo.textAlignment = .right

    return cell

}

Редактировать: я добавил @IBOutlet var tableView: UITableView! и подключил его к View Controller, я также назначил просмотр таблицы дляисточник данных и делегат View Controller. Для многих людей добавление выхода IB казалось решением этой проблемы, но на этикетке ячейки ничего не отображалось ...

1 Ответ

0 голосов
/ 09 ноября 2019

Вам просто нужно перезагрузить табличное представление после каждого вызова API.

tableView.reloadData()

Это лучше всего вызывать в обработчике завершения вашего вызова API, но вы этого не делаетеукажите свой код, где вызывается API.

При перезагрузке данных будет вызываться метод делегата cellForRowAt: для каждой ячейки, где у вас есть код, который вы хотите запустить.

...