2013-04-28 35 views
0

我有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 
} 
+1

如果您是製作「'UIView'」編程(換句話說,通過代碼),你會不會在故事板或XIB和「'awakeFromNib'」創建它不會得到調用。 – 2013-04-28 08:43:55

+0

haaaa ... @MichaelDautermann在這裏..其他人不需要擔心這個問題。 – 2013-04-28 08:53:09

+0

@MichaelDautermann,我有一個xib。並在控制器中我: _myUIView = [[[NSBundle mainBundle] loadNibNamed:@「myUIView」owner:self options:nil] objectAtIndex:0]; – Luda 2013-04-28 09:05:47

回答

1

我猜你已將「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 
} 
0

從你的問題,在很多事情都有點不清楚。當你創建自定義視圖時,你可以調用第二個初始化函數。事情是這樣的:

// 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方法的初始化。

+0

但是不會loadNibNamed調用awakeFromNib。 底線是:我想初始化實例變量,然後相應地更新UI。我應該使用哪些功能? – Luda 2013-04-28 09:07:33

+0

您可以在自定義的' - (id)initWithParameter:(id)參數'方法中更新用戶界面,或者您可以在'viewDidLoad'中執行此操作,並在init函數中調用viewDidLoad。 – 2013-04-28 09:41:01

+1

viewDidLoad是UIVIewController函數 – Luda 2013-04-28 13:18:59