我正在尝试创建一个可自动扩展的自定义单元格。我正在使用这个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 {
...
}
的cellForRowAtIndexPath:
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
}
}
请帮忙。
答案 0 :(得分:17)
“我的viewDidLoad中有self.tableView.registerClass(UITableViewCell.self,forCellReuseIdentifier:”eventCell“)”
这可能会覆盖您在故事板中设置的值。请尝试删除此行,或将其更改为 if (this.Customers.Count == 1)
{
SelectedCustomer = Customers[0];
CustomerBoxText = SelectedCustomer.AccountCode;
}
。
答案 1 :(得分:2)
在故事板中,单击单元格并将类名设置为EventTableViewCell而不是UITableViewCell
或者,如果您以编程方式执行所有操作,请在cellForRowAtIndexPath中执行此操作:
var cell : EventTableViewCell?
cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! EventTableViewCell?
if cell == nil {
cell = EventTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "eventCell")
}
return cell
答案 2 :(得分:1)
您确定您获得的单元格是EventTableViewCell
的实例吗?您是否使用registerClass:forCellReuseIdentifier:
注册自定义单元格类?
如果您更改了以下代码:
(cell as! EventTableViewCell).watchFrameChanges()
到此:
(cell as? EventTableViewCell)?.watchFrameChanges()
你还得到例外吗?
另外,您使用GitHub示例中的相同故事板吗?如果是这样,您是否更新了故事板以使用您的单元类名称并重用标识符?您正在使用EventTableViewCell /" eventCell"但原始代码使用了PickerTableViewCell /" cell"。
答案 3 :(得分:1)
正如@Greg Brown所说,解决方案是将单元格的类型更改为自定义单元格类:
//wrong:
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "eventCell")
//right:
self.tableView.registerClass(EventTableViewCell.self, forCellReuseIdentifier: "eventCell")