user3127576 user3127576 - 7 months ago 240
Swift Question

How to Set UITableViewCellStyleSubtitle and dequeueReusableCell in Swift?

I'd like a

UITableView
with
subtitle
-style cells that use
dequeueReusableCellWithIdentifier
.

My original Objective-C code was:

static NSString* reuseIdentifier = @"Cell";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if(!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier];
}


After searching the few
UITableView
questions here already on SO, I thought to write it in Swift like so:

tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: "Cell")

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell


But that doesn't let me say I want a
subtitle
style. So I tried this:

var cell :UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")


Which gives me a
subtitle
cell, but it doesn't let me
dequeueReusableCellWithIdentifier
.

I've researched some more and looked at this video tutorial, but he creates a separate
subclass
of
UITableViewCell
which I assume is unnecessary as I accomplished this same effect previously in Obj-C.

Any ideas? Thanks.

Answer

Keep in mind that UITableView is defined as an optional in the function, which means your initial cell declaration needs to check for the optional in the property. Also, the returned queued cell is also optional, so ensure you make an optional cast to UITableViewCell.

var cell:UITableViewCell? = 
tableView?.dequeueReusableCellWithIdentifier(reuseIdentifier) as? UITableViewCell
if (cell != nil)
{
   cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, 
                reuseIdentifier: reuseIdentifier)
}
// At this point, we definitely have a cell -- either dequeued or newly created,
// so let's force unwrap the optional into a UITableViewCell
cell!.detailTextLabel.text = "some text"

return cell