tableview.reloadData () не повторяет функцию cellForRowAt - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь создать приложение, используя Swift 4.

Цель таблицы - использовать UITableViewCell.SelectionStyle.none, если данные моей ячейки имеют 0 от API.

А позже я использовал UIRefreshControl(), чтобы обновить данные, потянув вниз таблицу.

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

Я уже пробовал reloadData(), но это не работает. Функция не перезагружает cellForRowAt.

Вот моя ячейка ForRowAt

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "custom") as! AppsCustomCell
        cell.imglink = data[indexPath.row].imglink
        cell.title = data[indexPath.row].AppName
        cell.subtitle = data[indexPath.row].AppDesc
        cell.count = String(data[indexPath.row].count)
        cell.backgroundColor = UIColor.clear
        cell.layoutSubviews()

        if data[indexPath.row].boolPress == 0 || data[indexPath.row].count < 1 {
//        if false {

            cell.selectionStyle = UITableViewCell.SelectionStyle.none
            cell.contentView.isOpaque = false
            cell.mainImageView.alpha = 0.5
            cell.titleView.alpha = 0.5
            cell.subtitleView.alpha = 0.5
            cell.count = "0"

        } else {

            cell.count = String(data[indexPath.row].count)
            cell.countView.backgroundColor = UIColor.red
            cell.countView.textColor = UIColor.white

        }

        return cell

    }

Я ожидаю перезагрузить всю таблицу, включая стили ячеек, всякий раз, когда я использую обновление, чтобы вытащить

РЕДАКТИРОВАТЬ : вот как я обновляю свой стол

@IBOutlet weak var tableView: UITableView!
var refreshControl = UIRefreshControl()

override func viewDidLoad() {
        refreshControl.addTarget(self, action: #selector(refresh), for: UIControl.Event.valueChanged)
        tableView.addSubview(refreshControl) // not required when using UITableViewController
}

@objc func refresh() {
        // Insert code here to get data from the API.
        self.tableView.reloadData()
        self.refreshControl.endRefreshing()
}

РЕДАКТИРОВАТЬ : Вот результат в пользовательском интерфейсе

Это старые данные

И ЗДЕСЬ TableView, если я опускаю стол, используя UIRefreshControl()

Обновленный стол

1 Ответ

0 голосов
/ 05 апреля 2019

Вы добавляете элемент управления обновлением в табличное представление неправильно. Попробуйте ниже:

override func viewDidLoad() {
    super.viewDidLoad()
    refreshControl.addTarget(self, action: #selector(refresh), for: UIControl.Event.valueChanged)
    tableView.refreshControl = refreshControl
}

Кроме того, установите стиль выбора, когда счетчик больше 0.

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "custom") as! AppsCustomCell
    cell.imglink = data[indexPath.row].imglink
    cell.title = data[indexPath.row].AppName
    cell.subtitle = data[indexPath.row].AppDesc
    cell.count = String(data[indexPath.row].count)
    cell.backgroundColor = UIColor.clear
    cell.layoutSubviews()

    if data[indexPath.row].boolPress == 0 || data[indexPath.row].count < 1 {
//        if false {

        cell.selectionStyle = UITableViewCell.SelectionStyle.none
        cell.contentView.isOpaque = false
        cell.mainImageView.alpha = 0.5
        cell.titleView.alpha = 0.5
        cell.subtitleView.alpha = 0.5
        cell.count = "0"

    } else {
        cell.selectionStyle = .default
        cell.count = String(data[indexPath.row].count)
        cell.countView.backgroundColor = UIColor.red
        cell.countView.textColor = UIColor.white
        cell.mainImageView.alpha = 1.0
        cell.titleView.alpha = 1.0
        cell.subtitleView.alpha = 1.0
    }

    return cell

}
...