init UIView带参数
问题描述:
我有UIView类,呈现在控制器中编程创建的视图。init 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
}
答
我猜你已将“UIView
”分类为某种东西,我们称之为“LudaView
”。
为您的参数公开一个属性,当您从xib文件加载它时,可以在其中设置参数。换句话说:
_myUIView = (LudaView *) [[[NSBundle mainBundle] loadNibNamed:@"myUIView" owner:self options:nil] objectAtIndex:0];
if(_myUIView)
{
_myUIView.parameters = parametersFromViewController;
}
您还可以设置你的“LudaView
”,然后当绘图方法被调用的第一次,你可以设置的东西了内BOOL属性或伊娃。例如。
- (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
}
答
从你的问题,在很多事情都有点不清楚。当你创建自定义视图时,你可以调用第二个初始化函数。事情是这样的:
// 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方法的初始化。
如果您是制作“'UIView'”编程(换句话说,通过代码),你会不会在故事板或XIB和“'awakeFromNib'”创建它不会得到调用。 – 2013-04-28 08:43:55
haaaa ... @MichaelDautermann在这里..其他人不需要担心这个问题。 – 2013-04-28 08:53:09
@MichaelDautermann,我有一个xib。并在控制器中我: _myUIView = [[[NSBundle mainBundle] loadNibNamed:@“myUIView”owner:self options:nil] objectAtIndex:0]; – Luda 2013-04-28 09:05:47