2012-02-07 11 views
2

UI要素をプログラムで既存のnibファイルに追加する方法が不思議です。UI要素をプログラムで既存のnibファイルに追加する方法

loadViewメソッドでプログラムでビューを作成し、次のようなコードを追加すると、ラベルが正しく表示されます。

self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; 

UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,2,150,100)]; 

[self.view addView:lbl]; 

しかし、既存のnibファイルにラベルを追加するにはどうすればよいですか?

+1

ビューの読み込みが終了した後( 'nib 'から)呼び出される' viewDidLoad'を使う必要があります。ビューでコードを完全に設定している場合は、 'loadView'メソッドのみを使用します。 –

答えて

2

Paulが指摘したように、viewDidLoadメソッドでカスタムコードを実行する必要があります。

Appleのドキュメント。

このメソッドは、ビューコントローラが対応するビューをメモリにロードした後に呼び出されます。このメソッドは、ビューがnibファイルに格納されているかどうかにかかわらず、 に関係なく呼び出されるか、またはloadViewメソッドでプログラムで を作成したかどうかに関係なく呼び出されます。この方法は、 が、nibファイルからロードされた のビューに対して追加の初期化ステップを実行するのに使用されることが最も一般的です。

だから、あなたのコントローラで、あなたがこれを行うことができます:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // your other views here 

    // call addSubview method on self.view 
} 

なぜあなたはこれを行うのですか?ここではビューがメモリにロードされ、アウトレットが正しく設定されていると確信しているからです。逆に

loadView方法

あなたはそうと ビュープロパティに、あなたの階層のルートビューを割り当てる必要があります 、手動でビューを作成するために、このメソッドをオーバーライドする場合。 (作成するビューは一意のインスタンスであり、 は他のView Controllerオブジェクトと共有しないでください)。 このメソッドのカスタム実装ではsuperを呼び出すべきではありません。

例は次のようになります。

- (void)loadView 
{ 
    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame]; 
    UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame]; 
    contentView.backgroundColor = [UIColor whiteColor]; 

    self.view = contentView; 

    // call addSubview method on self.view 
} 

私はあなたがView Controller Programming Guide for iOSを読むことをお勧めします。

希望します。

1

私の知る限り

UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,2,150,100)]; 
[self.view addSubView:lbl]; 
1

viewDidLoadの内部では、プログラムでのnibファイルを変更することはできません。

UIViewControllerメソッドのviewDidLoadにビューを追加できます。

関連する問題