自定义单元格已创建,但未显示

时间:2014-09-04 15:30:51

标签: ios cocoa-touch uitableview

所以我使用this tutorial使用代表余额的自定义单元格填充UITableView。当单步执行代码时,我目睹了创建正确数量的单元格(当前测试数据只有4个)及其标签'文本相应地设置。

我的问题是当表格显示在屏幕上时,只显示第一行/单元格。

任何关于为什么会发生这种情况的见解将不胜感激!

删除了旧代码。

BalanceCell.h:

#import <UIKit/UIKit.h>

@interface BalanceCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *amountLabel;
@property (weak, nonatomic) IBOutlet UILabel *modifiedLabel;

@end 

修改 我的TableView委托方法现在如下:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [_balances count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    BalanceCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier     forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[BalanceCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.backgroundColor = [_hex colorWithHexString:_themeColourString];

    return cell;
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(BalanceCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    Balance *item = [_balances objectAtIndex:indexPath.row];

    cell.nameLabel.textColor = _themeColour;
    cell.nameLabel.text = item.name;

    cell.amountLabel.textColor = _themeColour;
    cell.amountLabel.text = [NSString stringWithFormat:@"%@%@", item.symbol, item.value];

    cell.modifiedLabel.textColor = _themeColour;
    cell.modifiedLabel.text = [NSString stringWithFormat:@"%@", item.modified];

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath     {
    return 94;
}

正如@Sebyddd建议的那样,我现在在viewDidLoad方法中注册了NIB。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerNib:[UINib nibWithNibName:@"BalanceCell" bundle:nil] forCellReuseIdentifier:@"Cell"];
}

这些更改可能会使我的代码更正确,但still only the first cell is displayed

3 个答案:

答案 0 :(得分:1)

如果正在创建并正确返回单元格,我认为高度没有设置。默认情况下,我相信所有单元格的高度都为44。如果您的单元格超过此高度,则可能无法显示。

您可以使用(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath委托

告诉tableview调整每个单元格的高度

在该委托中,只需返回您的牢房高度。

编辑:

您正在使用dequeueReusableCellWithIdentifier:将返回带有相关标识符的 UITableViewCell对象,如果可重用单元队列中不存在此类对象,则返回nil。

而是使用dequeueReusableCellWithIdentifier:forIndexPath:,它将返回带有关联重用标识符的 UITableViewCell对象。此方法始终返回有效单元格。 您需要在viewDidLoad

中注册该自定义单元格的nib /类

答案 1 :(得分:0)

试试这个:

if (cell == nil) {
        [tableView registerNib:[UINib nibWithNibName:@"BalanceCell" bundle:nil] forCellReuseIdentifier:@"Cell"];
        cell = [[BalanceCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}

答案 2 :(得分:-1)

使用此tuto:http://www.appcoda.com/uitableview-tutorial-storyboard-xcode5/,您的tuto有点过时,很难遵循!