MarkF
MarkF

Reputation: 962

UILabel is nil in cellForRowAtIndexPath

I am using a Storyboard's prototype cell with a custom table cell class and the UILabels are nil in cellForRowAtIndexPath. Xcode's Identifier is correct, the cell is initialized, and the default UILabels (i.e. textLabel and detailTextLabel) are initialized but not the custom UILabels I added and setup IBOutlets for. A couple things I have tried:

Has anyone run into this?

@implementation PeopleGroupPickerViewController
{
    NSArray *people;
    NSArray *searchResults;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    people = [[DAL sharedInstance] getPeople:false];
    [self.tableView registerClass:[GenericDetailCell class] forCellReuseIdentifier:@"PersonCell"];
    [self.searchDisplayController.searchResultsTableView registerClass:[GenericDetailCell class] forCellReuseIdentifier:@"PersonCell"];

    // stackoverflow.com/questions/5474529
    [self.searchDisplayController setActive:YES];
    [self.searchDisplayController.searchBar becomeFirstResponder];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if(tableView == self.searchDisplayController.searchResultsTableView)
    {
        return 1;
    }
    else
    {
        return 1;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if(tableView == self.searchDisplayController.searchResultsTableView)
    {
        return searchResults.count;
    }
    else
    {
        return people.count;
    }
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    GenericDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PersonCell" forIndexPath:indexPath];

    Person_ *thisPerson;
    if(tableView == self.searchDisplayController.searchResultsTableView)
    {
        thisPerson = (Person_ *) searchResults[indexPath.row];
        NSLog(@"searchResultsTableView, %@",thisPerson.sName);
    }
    else
    {
        thisPerson = (Person_ *) people[indexPath.row];
        NSLog(@"UITableView, %@",thisPerson.sName);
    }
    Person_ *thisSpouse = [[DAL sharedInstance] getSpouse:thisPerson People:people];

    // cell.fieldName and cell.fieldValue are nil, cell is not nil
    cell.fieldName.text = thisPerson.sName;
    cell.fieldValue.text = thisSpouse.sName;

    return cell;
}

GenericDetailCell.h:

@interface GenericDetailCell : UITableViewCell

@property (nonatomic,weak) IBOutlet UILabel *fieldName;
@property (nonatomic,weak) IBOutlet UILabel *fieldValue;

@end

Upvotes: 1

Views: 697

Answers (1)

andrewbuilder
andrewbuilder

Reputation: 3791

Seems to me you might be attempting to combine a UITableViewCell predefined style (e.g. UITableViewCellStyleSubtitle) with a custom cell.

In your storyboard, if you have selected a predefined style for your Prototype cell, other controls will not be recognised.

To remedy this problem, in the Attribute Inspector for your Prototype UITableViewCell, select "Custom" type. Then add into the Prototype cell all the controls you require, including those needed to replace the default controls previously added automatically into the predefined cell type.

Upvotes: 2

Related Questions