2012-12-05 61 views
5

我有一個自定義UIView類,它被稱爲MyView,我與通過故事板配置的UIViewController一起使用。大多數視圖屬性是通過Interface Builder配置的;不過,我需要通過編程將它們設置爲背景的我的按鈕之前調整一對夫婦的圖像,像這樣:從故事板加載後調整UIView

-(void)setupVisuals { 
    UIImage *image = [[UIImage imageNamed:@"myButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)]; 
    // _myButton is an IBOutlet property set through the storyboard: 
    [_myButton setBackgroundImage:image forState:UIControlStateNormal]; 
} 

的問題是,我不能從初始化*打電話[self setupVisuals],因爲_myButtonnil在那時。

我加入這行來MyViewControllerviewDidLoad:

[(MyView*)self.view setupVisuals]; 

通過此調用到位的問題解決了,一切工作正常。然而,這感覺就像一個解決方法,而不是解決可能是一個相對普遍的問題。

是否有UIView方法覆蓋,或任何其他機制來完成MyView的視覺效果的初始化,而不需要進入viewDidLoad:機制?


*在這種情況下,初始化是 initWithCoder:,因爲該視圖是從故事板加載。我驗證了初始化程序被正確調用,但視覺效果尚未準備就緒。

+0

即使從NIB/XIB加載,IIRC'initWithFrame:'也會被調用。從那裏,通過'超'的電話,你不能這樣做嗎?我記得有一個類似的問題,我解決了它,但我不記得它是什麼/到底是什麼。 – 2012-12-05 15:04:59

+0

在這些情況下,我通常只是在'viewWillAppear'中執行「初始化」,但如果有更清晰的方法來處理它,我想知道。基本上什麼時候從故事板加載的視圖的所有插座完好無損? –

+0

您是否在viewController的viewWillAppear方法中嘗試了[self.myView setupVisuals]?如果您在IB初始化該視圖並將其設置爲插座,則應該起作用。 –

回答

2

聽起來好像您正確使用viewDidLoad:。根據蘋果的docs

您通常覆蓋此方法來從筆尖文件被加載的意見執行額外的初始化 。

如果您的目標是將此功能封裝在UIView級別,請嘗試layoutSubviews