web-dev-qa-db-ja.com

UIViewControllerサブクラスでinitWithNibNameが機能しないのはなぜですか?

UIViewControllerを新しいクラスPageViewControllerにサブクラス化しました(簡単な本のアプリを書いています)。 nibファイルからロードされた新しいビューを追加したいのですが、次のコードを使用しています。できます。

PageViewController *viewController1 = [[UIViewController alloc] initWithNibName:@"Page1" bundle:nil];
[viewController1.view setUserInteractionEnabled:YES];
[self.view addSubview:viewController1.view];

ただし、PageViewControllerでallocを呼び出す必要があるため、最初の行は間違っています。それを修正すると(以下)、コードはコンパイルされますが、xibファイルはロードされず、ビューは透明になります。

    PageViewController *viewController1 = [[PageViewController alloc] initWithNibName:@"Page1" bundle:nil];
[viewController1.view setUserInteractionEnabled:YES];
[self.view addSubview:viewController1.view];

PageViewController initWithNibNameメソッドはコメント解除されており、デフォルトであり、self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]を設定します。

私が試したこと:Page1 nibファイルで、PageViewControllerとUIViewControllerの間でファイル所有者クラスを変更しようとしました。はい、後でビューアウトレットに接続し直したことを思い出しました。

助けてください!私は困惑しています。

14
niels

PageViewControllerのloadViewメソッドをオーバーライドしましたか? viewController1.viewをNSLogするとどうなりますか?

実際、Interface Builderでは、ファイルの所有者をPageViewControllerに設定し、そのビューをInterfaceBuilderにあるビューに接続する必要があります。

16
drvdijk