Swift:如何将wilDisplayCell分配给特定的自定义寄存器单元?

时间:2015-07-11 18:20:23

标签: ios xcode swift uitableview

我的tableViewController中有两个已注册的单元格,但其中一个有动画功能(显示/隐藏),所以当我注册第二个单元格并将其带到tableview时,我在wilDisplayCell函数中遇到错误tableview,如何告诉willDisplayCell仅应用一种类型的单元格?

我的2个自定义寄存器单元格 //注册自定义单元格

self.tableView.registerNib(UINib(nibName: "NormalPostTableViewCell", bundle: nil), forCellReuseIdentifier: "NormalPostCell")
self.tableView.registerNib(UINib(nibName: "VideoTableViewCell", bundle: nil), forCellReuseIdentifier: "VideoCell")

覆盖一种细胞类型的功能:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        (cell as! NormalPostTableViewCell).watchFrameChanges()
}

错误:

  

无法将'app.VideoTableViewCell'(XXXXXX)类型的值转换为   'app.NormalPostTableViewCell'(XXXXXX)。

错误Scre​​eshot: enter image description here

方法2:

另一种方法(2)我尝试将willDisplayCell cell:设置为NormalPostTableViewCell,并删除override

func tableView(tableView: UITableView, willDisplayCell cell: NormalPostTableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        (cell as NormalPostTableViewCell).watchFrameChanges()
}

并且方法2导致此错误:

  

方法'tableView(:willDisplayCell:forRowAtIndexPath :)'with   Objective-C选择器'tableView:willDisplayCell:forRowAtIndexPath:'   与方法冲突   来自超类的'tableView(:willDisplayCell:forRowAtIndexPath :)'   'UITableViewController'具有相同的Objective-C选择器

如何在不干扰其他单元格的情况下修复此问题,并仅将此功能应用于NormalPostTableViewCell类?

1 个答案:

答案 0 :(得分:8)

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

    if let postCell = cell as? NormalPostTableViewCell  {
       postCell.watchFrameChanges()
    }
}