2016-04-23 18 views
0

私はiOS開発の新人です。現在、Big Nerd RanchのiOSプログラミング(Objective C)を読んでいます。サブビューを初期化する場所は?

は、私はそのようなUIButtonsなどサブビューを初期化する場所のように混乱しています、UIImageView programticallyビューを作成中:

  • が使う初期は initWithFrame方法でメインのUIView IEで行われ、追加の弱い参照を維持するべきですUIViewのサブビューに追加します。

又は

  • IはUIViewControllers loadViewメソッドでそれを行うとのUIViewControllerでサブビューへの弱い参照(インタフェースビルダーを使用してUIVewを作成するとき使用されるのと同じアプローチ)を維持しなければなりません。

私は両方のアプローチがさまざまなスタックオーバーフローポストで使用されているのを見ましたが、どちらのアプローチが正しいかを説明するポストはありません。

+0

どちらも正しいです。perticular viewの要件に依存します – Simmy

答えて

2

あなたのアプリの要件に従って初期化することができます。ビューやボタンなどがアプリの初期設定に含まれている場合は、viewDidloadで初期化する必要があります。

今、例えば要件は、ユーザー押しボタンのように存在し、その後、新しいビューが作成され、その後、あなたがボタンのクリックメソッドでビューを初期化することができますなど

だから、それはあなたの条件に依存しています。

開始時刻から時刻までのスタティックビューは、viewdidloadで初期化する必要があります。これは、viewcontrollerを呼び出す最初の方法であるためです。

これが役に立ちます。

+1

right one ...要件ごとに、ビューを初期化する必要があります。 – Simmy

+0

yeah @Sneha ............. :) – Lion

1

これは、使用しているアーキテクチャによって異なります。 AppleはModel-View-Controllerのフラグを立てますが、実際はUIViewControllerがViewです。 例: かなりのLoginViewControllerがあるとします。インスタンス化すると、次のようになります。

LoginViewController *loginVC = [[LoginViewController alloc] init]; 

この時点では、ビューはロードされません。あなたのViewControllerはinitメソッドを実行したばかりです。システムは

loginVC.view 

- (void)loadView; 

あなたはまさにそれを行う必要があるだろう、最初に実行されるメソッドを呼び出すと、あなたのビューをロードします。ですから、私が好むアプローチは追加のLoginViewを持つことです。

であり、LoginViewのinitメソッドでは、ビューを構築するコードを記述する必要があります。

しかし、あなたはこのようなすべてのあなたのサブビューをLoginViewを排除し、インスタンス化できます。私の経験で

- (void)loadView 
{ 
    self.view = [[UIView alloc] init]; 
    UIButton *button = [[UIButton alloc] initWithTargetBlaBlaBla...]; 
    [self.view addSubview:button]; 
    // add more fancy subviews 
} 

を、最初のアプローチは、第1よりもはるかにきれいです。それはまた、バージョン管理をもっと簡単にします(xibをマージしようとします、私はあなたを勇気づけます)。私はいつもMyView.mを使ってビュー(a.k.aセットアップconstriants、スタイル)をビルドし、MyViewController.mアニメーション、lifeCycleのようなものを使用します。私はMyView.mがプログラマチックなxibだと思っています。だからあなたはxibでできることは何でも、私はあなたの視点の中でそれを実行できるはずです。

希望すると助かります!

関連する問題