swift2 无法将类型“UITableViewCell”的值强制转换为“AppName.CustomCellName”

lmyy7pcs  于 2022-11-06  发布在  Swift
关注(0)|答案(4)|浏览(170)

我正在尝试创建一个自定义的单元格,它可以在点击时扩展。我使用了这个github示例:https://github.com/rcdilorenzo/Cell-Expander
该行给出运行时错误SIGABRT:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    (cell as! EventTableViewCell).watchFrameChanges()
    //Could not cast value of type 'UITableViewCell' (0x105aa1b80) to 'AppName.EventTableViewCell' (0x104287fe0).
}

我也从这个帖子上查了答案,跟着走了三步,但没有运气:Could not cast value of type 'UITableViewCell' to '(AppName).(CustomCellName)'
我的自定义单元格类如下所示:

import UIKit

class EventTableViewCell : UITableViewCell {
...
}

索引路径上的行单元格:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier( "eventCell", forIndexPath: indexPath)

    let date = self.eventArray[indexPath.row].startTime
    let calendar = NSCalendar.currentCalendar()
    let minutes = calendar.component(NSCalendarUnit.Minute, fromDate: date)
    var minutesString: String
    if (minutes == 0) {
        minutesString = "00"
    } else {
        minutesString = String(calendar.component(NSCalendarUnit.Minute, fromDate: date))
    }
    let hours = calendar.component(NSCalendarUnit.Hour, fromDate: date)
    cell.textLabel?.text = self.eventArray[indexPath.row].title + " - \(hours):\(minutesString)"

    return cell
    }
}

请帮帮忙。

uttx8gqw

uttx8gqw1#

“我有自我.表格视图.寄存器类(UITableViewCell.self,for CellReuseIdentifier:“eventCell”)在我的viewDidLoad中”
这可能会覆盖您在情节提要中设置的值。请尝试删除此行,或将其更改为self.tableView.registerClass(EventTableViewCell.self, forCellReuseIdentifier: "eventCell")

fkaflof6

fkaflof62#

在情节提要中,单击单元格并将类名设置为EventTableViewCell,而不是UITableViewCell
或者,如果您是以程序设计方式执行所有动作,请在cellForRowAtIndexPath中执行下列动作:

var cell : EventTableViewCell?
 cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! EventTableViewCell?
 if cell == nil {
           cell = EventTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "eventCell")
 }
return cell
tkclm6bt

tkclm6bt3#

你确定你得到的单元格是EventTableViewCell的一个示例吗?你用registerClass:forCellReuseIdentifier:注册了你的自定义单元格类吗?
如果您将程式码从这个变更为:

(cell as! EventTableViewCell).watchFrameChanges()

更改为:

(cell as? EventTableViewCell)?.watchFrameChanges()

你还能得到异常吗
另外,您是否使用了GitHub示例中的相同故事板?如果是,您是否更新了故事板以使用单元格类名并重用标识符?您使用的是EventTableViewCell/“eventCell”,但原始代码使用的是PickerTableViewCell/“cell”。

9o685dep

9o685dep4#

正如@Greg Brown所说,解决方案是将单元格的类型更改为自定义单元格类:

//wrong:
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "eventCell") 

//right:
self.tableView.registerClass(EventTableViewCell.self, forCellReuseIdentifier: "eventCell")

相关问题