Jan Cássio
Jan Cássio

Reputation: 2279

tableview:cellForRowAtIndexPath never called

I'm very confusing with this.

I'm trying to create an UITableView grouped programmatically, using the single view template from Xcode. Looking at internet for some examples, there is no secret, the approach to do this is very simple. I'm not sure if my implementation are wrong or right, because the method tableView:cellForRowAtIndexPath: is never called, but the other ones are called and return a integer > 0.

There is code, any suggestions are welcome. Thanks,

#import "ViewController.h"
#import "SimpleCell.h"

@interface ViewController () <UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, strong) UITableView *table;
@property (nonatomic, strong) NSArray *sections;
@property (nonatomic, strong) NSArray *section1;
@property (nonatomic, strong) NSArray *section2;
@property (nonatomic, strong) NSArray *section3;

@end

@implementation ViewController

static NSString * const CellIdentfier = @"Cell";


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self.view addSubview:self.table];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[table]|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:@{@"table": self.table}]];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.table reloadData];
    });

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (UITableView *)table
{
    if(!_table)
    {
        _table = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
        _table.delegate = self;
        _table.dataSource = self;
        _table.translatesAutoresizingMaskIntoConstraints = NO;
        _table.rowHeight = 34.0f;
        _table.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
        _table.backgroundColor = [UIColor grayColor];
        _table.showsVerticalScrollIndicator = NO;
        [_table registerClass:[SimpleCell class] forCellReuseIdentifier:CellIdentfier];
    }

    return _table;
}

- (NSArray *)sections
{
    if(!_sections)
    {
        _sections = @[@"Section1", @"Section2", @"Section3"];
    }

    return _sections;
}

- (NSArray *)section1
{
    if(!_section1)
    {
        _section1 = @[@"Player a", @"Player b", @"Player c"];
    }

    return _section1;
}

- (NSArray *)section2
{
    if(!_section2)
    {
        _section2 = @[@"Zone a", @"Zone b", @"Zone c"];
    }

    return _section2;
}

- (NSArray *)section3
{
    if(!_section3)
    {
        _section3 = @[@"Area a", @"Area b", @"Area c"];
    }

    return _section3;
}


#pragma mark - UI Table View Delegate impl


#pragma mark - UI Table View Datasource impl

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    DLog();
    SimpleCell *cell = [self.table dequeueReusableCellWithIdentifier:CellIdentfier];

    if(!cell)
        cell = [[SimpleCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentfier];

    cell.label.text = [NSString stringWithFormat:@"Section: %i Row: %i", indexPath.section, indexPath.row];
    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger total = 0;
    if(section == 0) total = self.section1.count;
    if(section == 1) total = self.section2.count;
    if(section == 2) total = self.section3.count;

    DLog(@"Rows: %i", total);

    return total;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    DLog();
    return self.sections.count;
}



@end

Upvotes: 1

Views: 1222

Answers (1)

random
random

Reputation: 8608

Delete this:

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[table]|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:@{@"table": self.table}]];

It should be called then.

EDIT:

Change this as well:

  _table = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];

This seems to fix it but I'm not sure why. I'm guessing that it has something to do with the table frame having to be larger than 0.

Upvotes: 1

Related Questions