tableview.reloadData()不重复cellForRowAt函数

时间:2019-04-05 04:23:51

标签: swift uitableview reloaddata

我正在尝试使用Swift 4创建一个应用。

如果我的单元格数据的API计数为0,则该表的目的是使用UITableViewCell.SelectionStyle.none

后来,我用UIRefreshControl()通过拉下表来刷新数据。

但是每当我下拉表格时,数据都会刷新,但是单元格的样式不会改变。

我已经尝试过reloadData(),但是它不起作用。该函数不会重新加载cellForRowAt

这是我的cellForRowAt

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()
}

编辑:这是用户界面中的结果

This is the old data

这里是tableView,如果我使用UIRefreshControl()拉下桌子

Refreshed Table

1 个答案:

答案 0 :(得分:0)

您以错误的方式将刷新控件添加到表视图。请尝试以下:

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

}