2012-03-29 14 views
5
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 120)]; 
    [view addSubview:headViewController.vew]; 
    [self.view addSubview:view]; 
} 

HeadViewController.h表示されません。UIViewのaddSubviewとサブビューは

そして、私はheadViewController.viewを見ることができません。

答えて

15

まず、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 

:あなたのような何かを持っている必要があります。

+0

私はあなたを訂正します:headviewController.viewは、サブビューとして追加されていない場合はnilです。 addsubviewを交換してフレームを設定する必要があります – NeverBe

+0

ARCについての私の更新を確認してください。 'headViewController.view'が' nil'の場合、nibファイル内のコントローラとのビューの接続を再確認してください。この方法(アウトレットの問題)の中か、終了したのか(ARCの問題)は 'nil'ですか? – marzapower

+0

私が言ったのと同じようにコードを変更しました。デフォルトのビューを削除するので、ビューを定義します。まだheadViewController.viewはありません...私は混乱しています。 – jxdwinter

0

それはタイプミスのように見える - .view

で[ビューaddSubview:headViewController.vew]を、私を忘れてしまいました。

+1

それは正しいかもしれないが、 opはすでにこの問題を長年前に解決しました... – greedybuddha

0

私は構文に欠けている

[ビューaddSubview:headViewController.view];

+0

答えは2年前に返されました。今は目的は何ですか? – YoungHobbit

+0

私はちょうどこれを見た – Bharath

関連する問題