所以我使用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。
答案 0 :(得分:1)
如果正在创建并正确返回单元格,我认为高度没有设置。默认情况下,我相信所有单元格的高度都为44
。如果您的单元格超过此高度,则可能无法显示。
您可以使用(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
委托
在该委托中,只需返回您的牢房高度。
编辑:
您正在使用dequeueReusableCellWithIdentifier:
将返回带有相关标识符的 UITableViewCell对象,如果可重用单元队列中不存在此类对象,则返回nil。
而是使用dequeueReusableCellWithIdentifier:forIndexPath:
,它将返回带有关联重用标识符的 UITableViewCell对象。此方法始终返回有效单元格。
您需要在viewDidLoad
答案 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有点过时,很难遵循!