从故事板加载后调整UIView

das*_*ght 5 objective-c uiview ios uistoryboard

我有一个UIView名为的自定义类MyView,我UIViewController通过故事板配置使用.大多数视图属性都是通过Interface Builder配置的; 但是,在将它们设置为按钮的背景之前,我需要以编程方式调整几个图像,如下所示:

-(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];
}
Run Code Online (Sandbox Code Playgroud)

问题是,我不能把[self setupVisuals]从初始化*,因为_myButtonnil在那个时候.

我加入这行解决了这个问题MyViewControllerviewDidLoad:

[(MyView*)self.view setupVisuals];
Run Code Online (Sandbox Code Playgroud)

有了这个电话,一切正常.然而,这感觉就像一个解决方案,而不是解决可能是一个相对常见的问题.

是否有一种UIView方法可以覆盖,或任何其他机制来完成MyView视觉的初始化而不进入viewDidLoad:机制?


*在这种情况下,初始化程序是initWithCoder:因为视图是从故事板加载的.我验证了初始化程序被正确调用,但视觉效果还没有准备好.

pix*_*x0r 2

听起来你使用得viewDidLoad:正确。根据苹果的文档

您通常会重写此方法以对从 nib 文件加载的视图执行额外的初始化。

如果您的目标是在级别上封装此功能UIView,请尝试layoutSubviews.