如何在表视图函数外使用表视图单元格

时间:2017-03-08 11:31:20

标签: swift

我需要在单元格中使用视图更改我的图像。但我无法在视野中使用我的单元格会在这里显示我已经完成的任务

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    let cell: HomeCellTableViewCell = self.tableCity.dequeueReusableCell(withIdentifier: "Cell") as! HomeCellTableViewCell
    if session == nil {
        print("first")
        cell.iconForDownload.setImage(UIImage(named: "ic_download"), for: .normal)
    } else {
        print("second")
        cell.iconForDownload.setImage(UIImage(named: "ic_next_green"), for: .normal)
    }
}

它打印"第一"但图像仍然没有改变

cellForRowAt

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: HomeCellTableViewCell = self.tableCity.dequeueReusableCell(withIdentifier: "Cell") as! HomeCellTableViewCell

    let city = listData[indexPath.row]
    cell.labelNameCity.text = city.region
    cell.labelNameCityJpn.text = city.regionJpn

    let stringImage = config.BASE_URL+city.imgArea
    let url = URL(string: stringImage.replacingOccurrences(of: " ", with: "%20"))
    urlDownload = config.BASE_URL+kota.urlDownload
    urlDownloadFinal = URL(string: urlDownload.replacingOccurrences(of: " ", with: "%20"))
    if session == nil {
        cell.imageCity.kf.setImage(with: url)
        cell.iconForDownload.setImage(UIImage(named: "ic_download"), for: .normal)
    } else {
        cell.imageCity.kf.setImage(with: url)
        cell.iconForDownload.setImage(UIImage(named: "ic_next_green"), for: .normal)
    }

    return cell
}

1 个答案:

答案 0 :(得分:3)

您需要使用cellForRow(at:)来获取cell它将返回可选UITableViewCell,因此请使用if letguard let来包装可选项。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)

    let indexPath = IndexPath(row: 0, section: 0) //Set your row and section
    if let cell = tableView.cellForRow(at: indexPath) as? HomeCellTableViewCell {
        //access cell
    }
}

注意: batter方法是设置数据源数组,只需使用reloadRows(at:with:)重新加载受影响的表行。

let indexPath = IndexPath(row: 0, section: 0) //Set your row and section
self.tableView.reloadRows(at: [indexPath], with: .automatic)