我只是试图通过让表中的所有单元格都显示“Hi”来测试自定义单元格,但它不起作用......单元格都是空白的。似乎在我设置标签文本之前调用了TheCell类......我不知道怎么做。
TheCell.h
#import <UIKit/UIKit.h>
@interface TheCell : UITableViewCell
@property (nonatomic, strong) IBOutlet UILabel *arrivalLabel;
@end
TheCell.m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.arrivalLabel.frame = CGRectMake(0, 0, 320, 30);
[self.contentView addSubview:self.arrivalLabel];
}
return self;
}
TableViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"anIdentifier";
TheCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[TheCell alloc] init];
cell.arrivalLabel.text = @"hi";
return cell;
}
答案 0 :(得分:3)
你有一些问题。您正在调用单元类的init
方法。您应该改为调用initWithStyle:reuseIdentifier:
方法。
如果对dequeue...
的调用返回nil
,您也应该只分配单元格。
然后,您需要确保您的单元格的initWithStyle:reuseIdentifier:
方法正在为arrivalLabel
属性创建标签实例。
TheCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[TheCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.arrivalLabel.text = @"hi";
另一个大问题是你的单元格的initWithStyle:reuseIdentifier:
方法。你永远不会创建标签。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
_arrivalLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 30)];
[self.contentView addSubview:_arrivalLabel];
}
return self;
}
答案 1 :(得分:2)
这是不正确的:
TheCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[TheCell alloc] init];
您必须执行以下操作:
TheCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[TheCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}