如果我没看错,您在第二个示例中有空单元格。您需要在界面构建器中将子视图添加到您的单元格内容,并将其作为出口连接到您的 EvenCell 类。例如:在界面生成器中将标签添加到您的自定义单元格,而不是在 EvenCell 类中为该标签创建一个出口,您可以将出口命名为 ex。titleLabel 和比在你的 tableview:cellForRowAtIndexPath 设置你的标签文本属性 cell.titleLabel.text = [allKeys objectAtIndex:indexPath.row]
我刚刚发现我错过了在 initWithStyle 方法中向单元格内容添加新视图的部分内容。所以我刚刚在 xCode 中创建了示例代码,即使在 EvenCell initWithStyle 方法中以编程方式添加单元格子视图,它也对我有用。这是示例:
#import <UIKit/UIKit.h>
@interface EvenCell : UITableViewCell
@property (nonatomic, strong) UILabel *textLabel;
@end
#import "EvenCell.h"
@implementation EvenCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.textLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 50, 20)];
[self.contentView addSubview:self.textLabel];
}
return self;}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
比在你的 tableView:cellForRowAtIndexPath: 方法中
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellId = @"MyCell";
EvenCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];
if(cell == nil) {
cell = [[testCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
cell.textLabel.text = @"Example title";
return cell;
}
在界面构建器中为 UITableView 设置动态原型单元格,将单元格类设置为 EvenCell 并将单元格标识符设置为 MyCell 并且它必须工作。我刚刚检查过了。