简体   繁体   中英

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

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.

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