2012-05-07 6 views
7

iOS上のinitWithNibNameは巧妙です。iPhoneの代わりにiPad用の別のNIBを自動的に読み込むようなことがあります(ただし、これは多くの人がこれを知らないものの、UIViewController.initWithNibNameには書かれていません)。initWithNibNameに一致するファイル名のルールは何ですか?

他に何ができますか?私はこのために見つけた唯一のAppleのドキュメントには、その説明:それは探して、名前

  • の終わりに〜のipadまたは〜iphoneを持つファイルを検索します

    1. をアップルは、それがルールに従っていることを意味

    しかし、そこに画像マッチングのためのルールへのリンクはません、と私はどちらか:(ために明示的なドキュメントを見つけることができないに一致する自動画像ファイル名の

    ルールが含まれる場合があります :「あなたは異なるNIB取得あなたが網膜の場合@ 2xをファイル名の末尾に置いてください "(これがうまくいくかどうかはわかりません)。

    私が本当に探しているのは、どのルールが使用されているかのリストです。 (もし彼らが "ロードランドスケープ対ロードポートレートペン"を持っているならば)もっと多くのハードコーディングを、私が書いたほとんどすべてのアプリケーションで繰り返すことができます。

  • +0

    大きな質問です!私は '〜iphone'と'〜ipad'マッチングについて知りませんでした。なぜならAppleは独自のテンプレートコードでこれを利用しているとは思わないからです!私はこの質問を見ています! – mbm29414

    答えて

    2

    Toあなたの(メイン)の質問に答える、これらはinitWithNibNameでファイル名のマッチングのためのルールです:

    ...しかし、あなたはペン先名を指定していない、とあなたのカスタムサブクラスで loadViewメソッドをオーバーライドしていない場合は、ビュー・コントローラは、他の手段を使用してnibファイルについて を検索します。具体的には、適切な名前(.nib拡張子なし)のファイル を探し、そのビューが要求されるたびにnibファイル をロードします。具体的には、次のいずれかの名前とnibファイルのために(順番に) なります

    1. ビューコントローラクラス名はMyViewControllerのように、単語「コントローラ」で終わる場合、それは、nibファイルを探しますその名前はMyView.nibのように "Controller"という単語のない クラス名と一致します。
    2. 名前がビュー コントローラクラスの名前と一致するnibファイルを探します。たとえば、クラス名が MyViewControllerの場合、MyViewController.nibファイルが検索されます。 下のUIViewControllerのドキュメントから

    nibName

    しかし、より多くのがあります...実はNSBundleは、その内部リソースを見つけるためのいくつかの非常にスマートなルールを持っています。 Here is the documentation page describing these rulesiOSのデバイス固有のリソースを参照)。

    to this pageは、バンドルリソースに適用できるすべての修飾子(および基本パターン)を記述しています(画像ファイル名のマッチングに関して言及しているリンクだと思います)。

    +0

    そのリンクを読む... NIBファイルのための特別な規則はありませんか?それらはすべてのリソース(リンク1)の「基本」ルールを継承しますが、追加のルールはありません(リンク2)。 – Adam

    +0

    はい、それは正しいでしょう。私が追加できるもう一つのことは、ローカリゼーションに基づくnibファイルの 'smart'ローディングです。これは本当に面白い話題なので、より多くの情報を追加できる人は誰もが大歓迎です。 – Alladinian

    関連する問題