我在让海关细胞出现时遇到问题。下面我发布了我的代码的简化版本:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
NSLog(@"Being Called?");
//reuseID = @"newtableid";
self.backgroundColor = [UIColor redColor];
self.name = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 50)];
self.name.backgroundColor = [UIColor redColor];
[self addSubview:self.name];
return self;
}
在我的viewController中,我在ViewDidLoad方法中设置了tableView:
self.table = [[UITableView alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 400) style:UITableViewStylePlain];
self.table.delegate = self;
self.table.dataSource = self;
self.table.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.table];
[self.table registerClass:NewTableViewCell.class forCellReuseIdentifier:@"Cell"];
然后,我像这样完成了cellForRowAt方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"Cell";
NewTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[NewTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
cell.backgroundColor = [UIColor blackColor];
cell.name.text = [_familyDetails objectAtIndex:indexPath.row];
return cell;
}
问题是,我的细胞上没有任何东西可以显示出来。我的NewTableVIewCell构造函数被调用,但是单元格显示为空白(没有颜色,标签等)我做错了什么?
答案 0 :(得分:2)
如果您以编程方式创建单元格,请确保将单元格注册到表格视图中。
[self.tableView registerClass:UITableViewCell.class forCellReuseIdentifier:"yourCellId"];
在这种情况下,我使用的是通用UITableViewCell
。您可以尝试在cellForRowAtIndexPath
中更改其文本标签以查看其是否有效。
如果需要,请务必将其更改为自定义单元格类。
答案 1 :(得分:1)
要dequeueReusableCellWithIdentifier
,您必须使用
- (void)registerClass:(Class)cellClass
forCellReuseIdentifier:(NSString *)identifier
通常,如果您使用NewTableViewCell
,则甚至不必实例化dequeueReusableCellWithIdentifier:forIndexPath:
。但是,如果您仍然使用dequeueReusableCellWithIdentifier:
,那么您仍然需要实例化您的单元格子类(感谢您提醒我Alejandro Ivan)。
编辑:所以你必须在你的viewDidLoad
中写下这样的东西,例如:
- (void)viewDidLoad {
[super viewDidLoad];
// Your stuff...
[self.table registerClass:[NewTableViewCell class] forCellReuseIdentifier: simpleTableIdentifier];
}