Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not cast value of type 'UITableViewCell' to 'AppName.CustomCellName'

I am trying to create a custom cell that expands on tap. I am using this github example: https://github.com/rcdilorenzo/Cell-Expander

This line gives runtime error 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).
}

I also checked answer from this post, followed three steps, but no luck: Could not cast value of type 'UITableViewCell' to '(AppName).(CustomCellName)'

My custom cell class looks like this:

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
    }
}

Please help.

like image 984
Async- Avatar asked Oct 30 '15 12:10

Async-


2 Answers

"I have self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "eventCell") in my viewDidLoad"

That's probably overriding the value you set in the storyboard. Try removing this line, or change it to self.tableView.registerClass(EventTableViewCell.self, forCellReuseIdentifier: "eventCell").

like image 134
Greg Brown Avatar answered Oct 17 '22 01:10

Greg Brown


In the storyboard, click on the cell and set the class name to EventTableViewCell instead of UITableViewCell

Or if you are doing everything programmatically, in cellForRowAtIndexPath do this instead:

 var cell : EventTableViewCell?
 cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! EventTableViewCell?
 if cell == nil {
           cell = EventTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "eventCell")
 }
return cell
like image 29
MobileMon Avatar answered Oct 17 '22 02:10

MobileMon