我无法在UITableViewCell中设置标签

时间:2013-11-11 01:14:31

标签: ios uitableview

我只是试图通过让表中的所有单元格都显示“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;
}

2 个答案:

答案 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];
}