0

我有 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
}
4

2 回答 2

1

我猜你已经将“ 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
}
于 2013-04-28T09:16:42.300 回答
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 方法中进行所有需要的初始化。

于 2013-04-28T09:00:16.353 回答