5

ストーリーボードを介して構成されたものと一緒に使用するというカスタムUIViewクラスがあります。ビュー プロパティの大部分は、Interface Builder を介して構成されます。ただし、次のように、ボタンの背景として設定する前に、いくつかの画像をプログラムで調整する必要があります。MyViewUIViewController

-(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 に答える