init UIView with parameters



我有一个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属性或ivar,然后当一个绘图方法第一次被调用时,你可以设置东西。如

- (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
}

从你的问题来看,很多事情都有点不清楚。当您创建自定义视图时,您可以调用第二个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方法中完成所有需要的初始化。

最新更新