7

Interface Builder を使用して構築されたカスタムUIView( ) があります。このカスタム ビューを、同じく IB を使用して設計されている のビューMyCustomUIViewに配置したいと考えています。の XIB に をサブビューとしてMyViewController配置し、そのクラスを に設定しました。問題は、コードを実行すると空白のビューしか表示されないことです。(コードでインスタンス化すると、うまく表示されます。)UIViewMyViewControllerMyCustomUIViewMyCustomUIView

initWithFrame:で次の方法でメソッドをオーバーライドするだけですMyCustomUIView.m:

- (id)initWithFrame:(CGRect)frame
{
    [[NSBundle mainBundle] loadNibNamed:@"MyCustomUIView" owner:self options:nil];
    self = self.view;
    return self;
}

ビューを正しくロードするにはどうすればよいですか? どのようinitWithCoder:に見えるべきですか?

4

2 に答える 2

2

あなたは正しいです。IB は initWithCoder を使用します。initWithCoder は、他の init メソッドと非常によく似ているはずです。

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        // CUSTOM INITIALIZATION HERE
    }
    return self;
}

IB 内でクラスを割り当てたら、意図を誤解していない限り、バンドルからインスタンス化する必要はありません。

于 2012-11-02T17:44:50.773 に答える
0

IBのビューコントローラーのビュー部分には何も入れないでください。代わりに、IB のビュー コントローラーの nib 名を、ビューを含む nib の名前に設定します。ビューを含む nib で、ファイルの所有者をビュー コントローラー クラスに設定し、そのviewプロパティをビューに接続します。

その結果、View Controller がインスタンス化されたときに、ペン先からインスタンス化された場合 (実際に何が起こるかは証明されていませんが、そうであるとだけ言っておきましょう)、ペン先を見つけてからビューをロードします。それ。

基本的に、View Controller がどこから来ても違いはないというのがルールです。私の本で説明しているように、ビューを同じ順序で探して同じ手順を実行します。

http://www.apeth.com/iOSBook/ch19.html#_view_controller_and_view_creation

この Web キャストでは:

http://www.youtube.com/watch?v=zIufcKpDIRo

于 2012-11-02T19:11:32.420 に答える