7

iOS の initWithNibName は巧妙です: iPhone の代わりに iPad 用に異なる NIB を自動的にロードするようなことを行います (多くの人はこれを知りませんが、UIViewController.initWithNibName には文書化されていません!)。

しかし、他に何ができるでしょうか?これについて私が見つけた唯一のAppleドキュメントは、次のことを説明しています:

  1. 名前の末尾に ~ipad または ~iphone が付くファイルを探して見つけます。
  2. Appleは、自動画像ファイル名マッチングのルールに従うことを暗示しています

しかし、画像マッチングのルールへのリンクはなく、どちらの明示的なドキュメントも見つかりません:(.

ルールには、「ファイル名の最後に @2x を付けると、retina 用に別の NIB を取得する」が含まれる場合があります (これが機能するかどうかはわかりません)。

私が本当に探しているのは、どのルールが使用されているかのリストです。インテリジェントな名前のマ​​ッチングをもっと活用できれば (たとえば、「横向きのペン先をロードする場合と縦向きのペン先をロードする場合」など)、多くのハードコーディングを節約できます。

4

1 に答える 1

2

あなたの(主な)質問に答えるために、これらはファイル名の一致のルールですinitWithNibName

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

  1. ビュー コントローラーのクラス名が MyViewController のように「Controller」という単語で終わる場合、MyView.nib のように「Controller」という単語を除いたクラス名と一致する名前を持つ nib ファイルを探します。
  2. ビュー コントローラ クラスの名前と一致する名前の nib ファイルを探します。たとえば、クラス名が MyViewController の場合、MyViewController.nib ファイルを探します。

nibNameの下のUIViewControllerのドキュメントから

しかし、もっとあります...実際には、NSBundleリソースをその中に配置するためのかなりスマートなルールがあります。これらのルールを説明するドキュメンテーション ページは次のとおりです ( iOS のデバイス固有のリソースを 参照)。

これにより、バンドル リソースに適用できるすべての修飾子 (および基本パターン) を説明するこのページが表示されます (これは、画像ファイル名の一致に関して言及しているリンクだと思います)。

于 2012-05-08T15:42:57.440 に答える