2012-12-05 63 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