まず、HeadViewController
クラスにview
コンセントを定義する必要はありません。 UIViewController
スーパークラスから自動的に継承されます。
次に、HeadViewController
のビューを現在のビューに直接追加することをお勧めします。例えば。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];
headViewController.view.frame = CGRectMake(0, 0, 320, 120);
[self.view addSubview:headViewController.view];
}
しかし、あなたはARC(自動参照カウント)を使用している場合は、headViewController
インスタンスはおそらくviewDidLoad
法の終了後に割り当てが解除されます。あなたが現在表示しているコントローラのローカル変数にそのインスタンスを割り当てるのが便利です(そして、それは強制です)。このようにして、後で必要に応じてビューのコンポーネントを処理でき、インスタンスが保持され、他のすべてが完全に機能します。 .m
クラスの実装ファイルの先頭に隠されたインタフェース定義で
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];
headViewController.view.frame = CGRectMake(0, 0, 320, 120);
[self.view addSubview:headViewController.view];
}
と
@interface MyController()
@property (nonatomic, strong) HeadViewController *headViewController;
@end
:あなたのような何かを持っている必要があります。
私はあなたを訂正します:headviewController.viewは、サブビューとして追加されていない場合はnilです。 addsubviewを交換してフレームを設定する必要があります – NeverBe
ARCについての私の更新を確認してください。 'headViewController.view'が' nil'の場合、nibファイル内のコントローラとのビューの接続を再確認してください。この方法(アウトレットの問題)の中か、終了したのか(ARCの問題)は 'nil'ですか? – marzapower
私が言ったのと同じようにコードを変更しました。デフォルトのビューを削除するので、ビューを定義します。まだheadViewController.viewはありません...私は混乱しています。 – jxdwinter