如何在表格视图单元格中隐藏自定义类标签?

时间:2017-03-19 11:55:27

标签: ios swift3 tableviewcell

我有一个带有自定义单元格和CustomCell类的表视图控制器。 VC中的代码如下所示:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Actual", for: indexPath as IndexPath) as! CustomCell

    let mySeries = series[indexPath.row] as Series
    cell.mySeries = mySeries
    return cell
}

CustomClass代码如下:

class CustomCell: UITableViewCell {

@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var seasonLabel: UILabel!
@IBOutlet weak var episodeLabel: UILabel!

var mySeries: Series! {
    didSet {
        nameLabel.text = mySeries.name
        seasonLabel.text = mySeries.season
        episodeLabel.text = mySeries.episode
    }
}

到目前为止一切正常。但我让细胞可编辑,重新排序的符号(三条纹)正在铺设在我的剧集标签上。所以我想在编辑完成之前隐藏这个标签。重新排序的编辑功能如下所示:

    override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to toIndexPath:IndexPath) {

    let customCell = CustomCell()
    customCell.episodeLabel.isHidden = true

    let rowToMove = series[fromIndexPath.row]
    series.remove(at: fromIndexPath.row)
    series.insert(rowToMove, at: toIndexPath.row)
}

这是正在运作的部分。但是当我创建一个CustomCell类的实例(customCell)并在上面的函数中插入这一行时,我得到一个致命错误,因为找到了nil:

customCell.episodeLabel.isHidden = true

当我在CustomCell类中创建函数hideEpisodeLabel()并从VC调用它时,行为相同。我做错了什么?

2 个答案:

答案 0 :(得分:0)

您必须在moveRowAt func

中获取单元格实例
let customCell= tableView.cellForRowAtIndexPath(indexPath) as? SeriesCell
    customCell.episodeLabel.isHidden = true
 }

答案 1 :(得分:0)

此附加方法以所需方式隐藏标签:

    override func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
    let customCell = tableView.cellForRow(at: indexPath) as? CustomCell
    customCell?.episodeLabel.isHidden = true
    return true
}

要带回标签,我必须重新加载表格视图。这可以通过覆盖setEditing方法来完成:

    override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    if(!editing) {
        tableView.reloadData()
    }
}

现在,在'cellForRowAt indexPath:'方法中,我只需要将标签设置为:isHidden = false。