質問

私はそうとしていることからアップルの 依頼 書類の製造工程においては、原料である最高の場所への初期化を見通しコントロールをコントローラです。

とサポートでかなり簡単に、彼らは常に初期化された内部 InitializeDesigner, というのコンストラクタです。ようにしてい合わせの信頼性をこのパターンが可能です。

私協働 UIViewControllersUITableViewControllersUINavigationController ほとんどの時間を-この効果があります。

次に例を示します。

public MyController()
{
    // Here?
    AddViews();
}

public override ViewDidLoad()
{
    base.ViewDidLoad();

    // Or is should it be here?
    AddViews();
}

public override ViewWillAppear(bool )
{
    base.ViewWillAppear(animated);

    // Here?
    AddViews();
}

public override ViewDidAppear(bool animated)
{
    base.ViewDidLoad(animated);

    // Or maybe here?
    AddViews();
}

void AddViews()
{
    UILabel label = new UILabel();
    label.Text = "Test";
    label.Frame = new RectangleF(100,100,100,26);
    View.AddSubView(label);

    UIWebView webview = new UIWebView();
    webview .Frame = new RectangleF(100,100,100,26);
    View.AddSubView(webview);
}

うな結果であUIControlsた時に追加するビューの異なるところがございます。視差がothertimesのwebviewがそれは、あなたがかけがえのない.

ある原則を守のための追加。

役に立ちましたか?

解決

一般的に、アドバイスをお聞かせ下さい:

  • ViewDidLoad -いの追加を制御するべき表示と共に、ぐっとるのは、理に適っていると思いViewDidLoad方法です。基本的にはこのメソッドが呼び出されずに読み込まれます。例えば、私は3つのラベルは、追加のラベルはこちらを見なが存在しない方。

  • ViewWillAppear:使っていViewWillAppear通常だけでデータの更新を行う。ですから、上記の例は、使用する実際の負荷のデータからドメインをコードしている。創UIViewsはかなり高価で、どうしたらよいかということですてやっているのViewWillAppear方法、足場がわかっていることになるとiPhoneが既に準備のUIViewの利用者に何重いま衝撃性能に非常に可視的にアニメーションなどが遅れます。

  • ViewDidAppear:最後に、使用しViewDidAppearスタートを切った新しいスレッドようになり、長時間実行をいうとwebservice話を別のデータします。たのは良いことであるので眺望がすでに存在するとが表示され、ユーザーで表示することができますもの"待ち"へのメッセージのユーザーがデータを取得します。

ありその他の技を使用することができますが。きたいと言う、UILabelを"fly"の形後の形態であるとみなされます。その場合、追加のラベルの形のViewDidLoadがフレーム以外の地域、そしてViewDidAppearっていて、アニメーションに飛ぶ時代に突入したと言われています。

希望です。

他のヒント

うーん、Appleのドキュメントは、私見かなり明確であるように見えます。

あなたがプログラムで独自のルートビュー(この特定のコントローラのビュー階層のルートビュー)を作成する場合は、-loadViewを呼び出すことなくsuperでそれを作成する必要がありますし、完了したらviewプロパティを設定します。あなたのビューがペン先からロードされている場合は、あなたが-loadViewに触れてはいけません。

あなたは、View Controllerのビューにカスタムサブビューを追加するか、そうでなければ-viewDidLoadでそれを修正します。お勧めは-viewDidLoadであなたのUILabelとのUIWebViewを作成し、アイバーズでそれらを維持する必要がある場合-viewDidUnloadへの参照を設定し、nilでそれらを解放することです。

注:-viewDidUnloadは、もはやメモリ圧力の下で、そのビューが削除されますのでUIViewControllerは、iOSの6で非推奨されていないと、ただのより呼び出されません。

のviewDidLoadは 'MEMORY' に関し、viewWillAppear / viewDidAppearは '外観' に関する。 (あなたのビューコントローラのビューのルート図である)View Controllerのビューは、コントローラのビューがすでにメモリ内にある場合でも、何回も消える/表示することができます。

(ルート・ビューを参照する場合は、ルートビューはその子への参照(サブビュー)を持っているので、私も、そのサブビューを意味するが、ビューコントローラの観点から、それは通常はルート・ビューを知っている。参考サブビューへ缶は、ビューコントローラの出口を介して正常に行われます。)

メモリの警告があるとき、

ルート・ビュー自体がメモリから除去することができます。メモリからそれらを削除するための最良の時間があるときにビューコントローラが決定します。

だから、あなたは、通常のメモリに追加するサブビュー手段を追加するので、のviewDidLoadにサブビューを追加します。しかし、あなたはプログラムであなたのすべてのビューを作成していない場合は(ないのnibファイルから)。その場合は、あなたはので、この場合には、あなたはサブビューを追加するためのviewDidLoadを省略することができ、loadViewメソッドをオーバーライドして、ルート・ビューを作成し、そこにサブビューを追加する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top