我有一堆UILabel,我想添加到我的自定义UITableViewCell类。我知道如何使用IBOutlets做到这一点,但我只想知道为什么以编程方式这样做对我来说不起作用。这是我的自定义UITableViewCell类的代码。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 45)];
[_nameLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:23.0]];
[_nameLabel setTextColor:[UIColor blackColor]];
[self addSubview:_nameLabel];
_artistLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, 91, 21)];
[_artistLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:15.0]];
[_artistLabel setTextColor:[UIColor blackColor]];
_artistLabel.textAlignment = NSTextAlignmentCenter;
[self addSubview:_artistLabel]; }
return self;
}
此外,我将附加使用此单元格的UITableView子类的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
SKItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
SKItemDoc *item = [self.items objectAtIndex:indexPath.row];
cell.nameLabel.text = item.data.title;
cell.artistLabel.text = item.data.artist;
return cell;
}
答案 0 :(得分:1)
在自定义单元格init方法中。您需要向self.contentView
添加标签。改为
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 45)];
[_nameLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:23.0]];
[_nameLabel setTextColor:[UIColor blackColor]];
[self.contentView addSubview:_nameLabel];
_artistLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, 91, 21)];
[_artistLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:15.0]];
[_artistLabel setTextColor:[UIColor blackColor]];
_artistLabel.textAlignment = NSTextAlignmentCenter;
[self.contentView addSubview:_artistLabel]; }
return self;
}
答案 1 :(得分:1)
如果你在storyboard或xib中创建了这个单元格,那么你需要覆盖initWithCoder:而不是initWithStyle:reuseIdentifier :(不会被调用)。
答案 2 :(得分:0)
如果单元格尚不存在,则需要创建。
E.G:
SKItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if(NULL == cell)
{
cell = [[SKItemCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}
样式(UITableViewCellStyleDefault
或其他)与您只需创建一些可重用单元格的事实无关。
另外,在自定义单元格的.h文件中声明属性:
@property (strong) IBOutlet UILabel * nameLabel;
@property (strong) IBOutlet UILabel *artistLabel;
并在.m文件中:
@synthesize nameLabel = _nameLabel;
@synthesize artistLabel = _artistLabel;