我正在尝试清理我的代码并使用 MVC 原则,方法是将尽可能多的与视图相关的内容推送到情节提要以及自定义 UIView 类中(即,而不是自己做与视图相关的内容UIViewController
)
所以我有一个自定义 UITableViewCell (称为CustomCell
),它有几个属性,其中一个是我自己的label
。由于我从情节提要加载单元格,因此我使用initWithCoder
而不是初始化它initWithStyle:reuseIdentifier:
,这就是我所拥有CustomCell.m
的子类UITableViewCell
(由于某种原因,我无法弄清楚如何使用情节提要设置自定义字体..但是这与这个问题无关):
// CustomCell.m - subclass of UITableViewCell
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
NSLog(@"customizing cell font having text %@", self.label.text);
UIFont *customFont = [UIFont fontWithName:@"Montserrat" size:16];
self.label.textColor = [UIColor redColor];
[self.label setFont:customFont];
}
return self;
}
这根本行不通..null
文本的日志语句输出只是 b/c 文本尚未加载。self.label
也是空的(我不知道为什么我认为它现在应该从笔尖膨胀)但即使我在这里初始化它..它仍然无法工作。
所以我的工作是简单地将这个单元格自定义部分放在TableViewController
:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath {
UIFont *customFont = [UIFont fontWithName:@"Montserrat" size:16];
[((CustomCell *)cell).label setFont:customFont];
}
它工作得很好..我对这种方法不满意,我想知道如何让它从内部工作CustomCell.m
更新:让事情变得更有趣..如果我将 UITableViewCell 属性的自定义代码放在 initWithCoder 中,它们就可以工作!考虑这个例子:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor blueColor]];
[self setSelectedBackgroundView:bgColorView]; // actually works!
}
return self;
}
这使得这更加奇怪。