简体   繁体   中英

Tableview subtitles on IOS7

I'm trying to add a subtitle to my tableview cells, but they are not displayed. Where is the mistake?

Is the row [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle] up-to-date, also with iOS 7?

Best regards

Frank


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = @"TestA";
    cell.detailTextLabel.text = @"TestB";

    return cell;
}

This code:

if (!cell)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

will never execute because dequeueReusableCellWithIdentifier: forIndexPath: is guaranteed to allocate a new cell.

Unfortunately, registerClass:forCellReuseIdentifier: doesn't let you specify a UITableViewCellStyle .

Change dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath to simply dequeueReusableCellWithIdentifier:CellIdentifier . This method does not guarantee a cell will be returned.* When it's not, your code will then create a new cell with the style you want.


* - (It will if you're using a storyboard, as rdelmar points out, but that's not the case here.)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath        *)indexPath {
UITableViewCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil)
{ 
 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
}
cell.textLabel.text = @"Title1"; 

cell.detailTextLabel.text = @"Subtitle 1";

return cell;
}

I had a similar problem and no solution on the internet worked for me. Turns out I was being an idiot. I'll post my solution just incase someone else experience a similar scenario.

I am assuming that you are using storyboard , have created a prototype and set the style to subtitle

In your storyboards document outline , make sure you select the protoptype cell and select the subtitle. See image:

在此输入图像描述


Now ensure that the label font colour is of a nature that us visible on your background!

Simply subclass UITableViewCell and override

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;

with the first line being

[super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier];

And register your cell class with the table view

[tableView registerClass:[YourCellSubclass class] forCellReuseIdentifier:@"YourCellID"];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM