静态UITableView单元格属性修改

时间:2015-11-19 10:14:46

标签: ios objective-c uitableview static

我的故事板中有静态TaskScheduler设置。我已经将一些单元格子类化并添加了这个属性:

UITableView

我还有代码在@property (nonatomic, strong) UILabel *label;方法中将标签添加到我的单元格中。我的标签显示在我的单元格中没有问题。我可以看到标签上写着' PLACEHOLDER'但我没有更新说明我在layoutSubviews中设置的文字。

cellForRowAtIndexPath方法中,我有以下内容:

cellForRowAtIndexPath

但是,这不会更新我标签中的文字。标签实际上是零。

编辑:

这是完整的代码......

APInfoTableViewCell *cell = (APInfoTableViewCell*)[super tableView:tableView cellForRowAtIndexPath:indexPath]; [cell.label setText@"Hello World"]; 子类:

UITableViewCell

@property (nonatomic, strong) UILabel *infoLabel; -(void)layoutSubviews { [super layoutSubviews]; [self initUI]; } -(void)initUI { //add long press to show info label _infoLabel = [UILabel new]; [_infoLabel setText:@"PLACEHOLDER"]; [_infoLabel setFont:[UIFont fontWithName:@"Avenir-Medium" size:10.0f]]; [_infoLabel setTextAlignment:NSTextAlignmentCenter]; [_infoLabel setTextColor:[UIColor apText]]; [_infoLabel setAlpha:1.0f]; [_infoLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; [self addSubview:_infoLabel]; NSArray *infoConstraintH = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-40-[infoLbl]-40-|" options:0 metrics:nil views:@{ @"infoLbl" : _infoLabel }]; [self addConstraints:infoConstraintH]; NSArray *infoConstraintV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[infoLbl]-10-|" options:0 metrics:nil views:@{ @"infoLbl" : _infoLabel }]; [self addConstraints:infoConstraintV]; }

ViewController

2 个答案:

答案 0 :(得分:1)

如果您使用的是故事板,并且您不想添加IB插座,请从initUI方法调用awakeFromNib方法。 如果您没有使用storyboard实现- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier方法并从那里调用它。

一旦从nib(来自storyboard或xib)实例化单元格(或任何UIView子类),就会调用awakeFromNib方法。它在视图的生命周期中只调用一次

注意:如果以编程方式创建视图子类,则不会调用此方法。

根据文件

  

子类可以根据需要覆盖此方法,以执行其子视图的更精确布局。仅当子视图的自动调整大小和基于约束的行为不提供所需的行为时,才应覆盖此方法。您可以使用实现直接设置子视图的框架矩形。

这意味着,使用此方法进行已添加的任何其他布局。当某些帧/自动布局约束发生变化时,将调用此方法。

答案 1 :(得分:0)

您需要在tableView:cellForRowAtIndexPath:中实例化新单元格或使用dequeueReusableCellWithIdentifier:cellForRowAtIndexPath:返回表视图中可见的实例化单元格。由于您没有在任何地方实例化单元格,因此表格视图中没有单元格,因此cellForRowAtIndexPath:会返回nil

此外layoutSubviews被称为很多,并被称为迟到。您不应该依赖它来初始化您的标签。在您调用layoutSubviews时,您的单元格将继续添加其他标签!指定的初始化程序是添加initUI代码的地方(顾名思义)。如果您的UITableViewCell子类未在其视图中使用XIB / Storyboard,则initWithStyle:reuseIdentifier:是指定的初始化程序。 (否则为initWithCoder:awakeFromNib