5

我有一个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];
}

问题是我不能[self setupVisuals]从初始化程序*调用,因为当时是_myButtonnil

MyViewController我通过将此行添加到viewDidLoad:

[(MyView*)self.view setupVisuals];

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

是否有UIView覆盖方法或任何其他机制来完成MyView视觉效果的初始化而不利用该viewDidLoad:机制?


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

4

1 回答 1

2

听起来您使用viewDidLoad:正确。根据 Apple 的文档

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

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

于 2012-12-05T15:11:57.870 回答