我有UIView类,它提供了在控制器中以编程方式创建的视图。
创建(初始化)UIView时我想从UIViewController传输参数,因此可以初始化UIView的实例变量。我希望它在调用awakeFromNib
之前发生。所以在awakeFromNib
我可以使用这些参数。
我想我需要在- (id)initWithCoder:(NSCoder *)aDecoder
中这样做,但是如何?它只会收到aDecoder
这样的事情:
- (id)initWithCoder:(NSCoder *)aDecoder {
if(self = [super initWithCoder:aDecoder]) {
_instanceParameter = parameterFromController;
}
return self;
}
-(void)awakeFromNib{
if (_instanceParameter)
do logic
}
答案 0 :(得分:1)
我猜你已经将“UIView
”子类化为某种东西,我们称之为“LudaView
”。
公开参数的属性,当您从xib文件加载它时,可以在那里设置参数。换句话说:
_myUIView = (LudaView *) [[[NSBundle mainBundle] loadNibNamed:@"myUIView" owner:self options:nil] objectAtIndex:0];
if(_myUIView)
{
_myUIView.parameters = parametersFromViewController;
}
您还可以在“LudaView
”中设置BOOL属性或ivar,然后在第一次调用绘图方法时,您可以设置内容。 E.G。
- (void)drawRect:(CGRect)rect
{
if(everythingSetUp == NO)
{
// do stuff with your parameters here
everythingSetUp = YES;
}
// you shouldn't need to call [super drawRect: rect] here if
// subclassing directly from UIView, according to Apple docs
}
答案 1 :(得分:0)
从你的问题来看,很多事情都有点不清楚。创建自定义视图时,可以调用第二个init函数。像这样:
// In the UIViewController
NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"CustomView"
owner:self
options:nil];
CustomView *myView = [[nibs objectAtIndex:0] initWithParameter:myParameter];
[self.view addSubview:myView];
然后在你的UIView课程中:
- (id) initWithParameter:(id)parameter
{
_instanceParameter = parameter;
// Do whatever initialization you need to
...
return self;
}
只需在initWithParameter方法中完成所需的所有初始化。