即使正确调用了cellForRowAtIndexPath,UITableView也会显示空白单元格

时间:2014-02-19 16:05:11

标签: ios iphone objective-c uitableview

我有一个非常奇怪的问题,我有一种感觉,这将是一个奇怪的解决方案,就像我有错误的配置文件(检查过!)。

我可以在模拟器和我的iPhone 5上运行,我有一个UITableView填充了一些单元格,都很好玩。

但是,我只是在我的5S上运行它,表格视图完全是空白的。细胞不可选择或任何东西。我已经检查过TableView没有被发布或任何东西,如果我下拉刷新它会响应。我甚至可以看到我的日志记录说,如果我进行刷新,则会再次调用numberOfRows ...和cellForRow ..方法,而根本没有显示任何UI!

以下是各种片段,如果有帮助的话:

- (void)viewDidLoad
{
...
    UINib *cellNib = [UINib nibWithNibName:@"EJCMatchInboxCell" bundle:nil];
    [self.matchTable registerNib:cellNib forCellReuseIdentifier:kEJCMatchInboxCellIdent];

    UINib *segmentedCellNib = [UINib nibWithNibName:@"EJCSegmentedControlCell" bundle:nil];
    [self.matchTable registerNib:segmentedCellNib forCellReuseIdentifier:kEJCMatchInboxSegmentedControlCellIdent];
...
    self.refreshControl = [[UIRefreshControl alloc] init];
    [self.refreshControl addTarget:self action:@selector(refresh)
         forControlEvents:UIControlEventValueChanged];
    [self.matchTable addSubview:self.refreshControl];
...
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.row == 0 && indexPath.section == 0) {
        return NO;
    }

    return YES;
}

- (long)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (long)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    long rowCount = matches.count + 1;
    NSLog(@"MatchInboxVC::numberOfRowsInSection %li", rowCount);
    return rowCount;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"MatchInboxVC::cellForRowAtIndexPath %li", indexPath.row);

    if(indexPath.row == 0 && indexPath.section == 0) {
        // segmented control cell
        EJCSegmentedControlCell *cell = [tableView dequeueReusableCellWithIdentifier:kEJCMatchInboxSegmentedControlCellIdent];

        // Configure the cell...
        if (cell == nil) {
            cell = [[EJCSegmentedControlCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kEJCMatchInboxSegmentedControlCellIdent];
        }

        [cell.segmentedControl setSelectedSegmentIndex:selectedSegmentIndex];
        [cell.segmentedControl addTarget:self action:@selector(changedSegmentSelection:) forControlEvents:UIControlEventValueChanged];
        [cell.segmentedControl setTitle:@"Current" forSegmentAtIndex:0];
        [cell.segmentedControl setTitle:@"Deleted" forSegmentAtIndex:1];

        return cell;
    }
    else {
        // match cell
        EJCMatchInboxCell *cell = [tableView dequeueReusableCellWithIdentifier:kEJCMatchInboxCellIdent];

        // Configure the cell...
        if (cell == nil) {
            cell = [[EJCMatchInboxCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kEJCMatchInboxCellIdent];
        }

        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

        EJCMatch *m = matches[indexPath.row - 1];
        [cell setupWithMatch:m];

        return cell;
    }
}

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.row == 0 && indexPath.section == 0) {
        return 38.0f;
    }
    else {
        return 65.0f;
    }
}

记录输出:

MatchInboxVC::numberOfRowsInSection 2
MatchInboxVC::cellForRowAtIndexPath 0
MatchInboxVC::cellForRowAtIndexPath 1

1 个答案:

答案 0 :(得分:2)

正确 - 我认为忘记正确读取方法定义是我自己的错,但显然在5S上为heightForRowAtIndexPath设置返回类型(float)会阻止单元格显示。

通过从

更改方法定义来解决
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath