本文介绍了在哪里设置子视图的层属性?为什么不在initWithCoder中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我创建了一个自定义UITableViewCell
(在本例中,假设子类是MyViewCell
),它有一个关联的NIB文件MyViewCell.xib
。笔尖包含一个UITableViewCell
和一个子视图UIView
(名为cardContainer
),它只是一个蓝色背景的矩形。我想在UIView
周围添加一个投影,所以我在-initWithCoder
调用中添加了set层属性:
@implementation MyViewCell
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self initView];
}
return self;
}
- (void) initView
{
UIBezier Path*shadowPath =[UIBezierPath bezierPathWithRect:view.bounds];
[self.cardContainer.layer setShadowColor: [UIColor blackColor].CGColor];
[self.cardContainer.layer setShadowOpacity: 0.8];
[self.cardContainer.layer setShadowRadius:3.0];
[self.cardContainer.layer setShadowOffset: CGSizeMake(2.0,2.0)];
view.layer.shadowPath = shadowPath.CGPath;
}
@end
我遇到的问题是没有绘制这些层属性。如果我在awakeFromNib
或drawRect
内调用-initView
调用,它将按预期绘制。我的问题是:为什么我的原始代码不起作用?我应该往哪里打电话initView
?是否存在某个视图生命周期?我知道initWithCoder
没有连接插座,但它在运行时没有崩溃。
我通读了Apple documentation around Views,并搜索了SO问题,但没有找到答案。我找到了这个SO answer,但再次无法解释。
推荐答案
嘿,我找到了一个更好的方法,只需为子视图添加一些运行时属性cardContainer
像这样
.m文件中不再有代码。
编辑:
发件人:NSNibAwaking Protocol
重要提示:由于无法保证从存档实例化对象的顺序,因此您的初始化方法不应向层次结构中的其他对象发送消息。可以从wakeFromNib内部安全地将消息发送到其他对象-到那时,可以确保所有对象都未存档和初始化(当然,不一定被唤醒)。
这篇关于在哪里设置子视图的层属性?为什么不在initWithCoder中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!