1

我对此感到非常困惑。

我正在尝试使用 Xcode 中的单个视图模板以编程方式创建一个分组的 UITableView。在网上看一些例子,没有什么秘密,这样做的方法很简单。我不确定我的实现是对还是错,因为方法 tableView:cellForRowAtIndexPath: 从未被调用,但其他的被调用并返回一个大于 0 的整数。

有代码,欢迎提出建议。谢谢,

#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
4

1 回答 1

1

删除这个:

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

那时应该调用它。

编辑:

也改变这个:

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

这似乎解决了它,但我不知道为什么。我猜它与必须大于 0 的表框有关。

于 2013-09-20T23:45:16.407 回答