7

私は多くのことを検索し、いくつかの教科書を掘り下げましたが、iOS アプリで UIView サブクラスを定義するためのベスト プラクティスの簡単な説明が本当にありがたいです。

  • xib を使用している場合、ランタイムの開始時にどこでコントロールを追加/微調整できますか?
  • プログラムでビルドする場合、ViewController (loadView?) または別の UIView サブクラスでこれを行う必要がありますか? 後者の場合、サブビューとして追加された場合にそのコントローラーが誰であるかを知るために、ファイルの所有者を指定するにはどうすればよいですか?
  • awakeFromNib、loadView、viewDidLoad、UIView.init、UIViewController.init などに何を配置しますか?
  • 他によく使う方法は?

超具体的な手順は必要ありません。使用可能な各メソッドにどのような種類のコードが含まれているかを説明するクイック リファレンス ガイドを探しています。

4

3 に答える 3

6

私の実践は次のとおりです。

  • 別のファイルにカスタムUIViewサブクラスを作成します。
  • UIViewController のinitで、すべての非 UI オブジェクトを作成します
  • UIViewController のloadViewでカスタム UIView を作成し、それをコントローラーのself.viewとして設定します
  • UIViewController のviewDidUnload (メモリ警告時に呼び出される) で、すべての UI コンポーネント (私のカスタム UIView) を解放します
  • UIViewController のdeallocで、すべての非 UI オブジェクトを解放します

私のカスタム UIView サブクラスでは、次のようになります。

  • initメソッドですべてのサブビューを作成し、dealloc で解放します
  • layoutSubviews では、サブビューのフレームをこのように設定して、フレームが変更された場合にのみ設定されるようにします。これは、サブビューの再描画にコストがかかるためです。
if ( !CGRectEqualToRect(__subview.frame, rect) ) {
  __subview.frame = rect;
}

それが私がすべての UIViewControllers で行うことです。IB は使用しません。すべてプログラムで作成されます。

それが役に立てば幸い!

于 2012-05-30T19:05:32.340 に答える
4

xibを使用している場合、ランタイムの開始時にコントロールをどこに追加/微調整できますか?

viewDidLoadビューコントローラの。

プログラムでビルドする場合、これをViewController(loadView?)または別のUIViewサブクラスで行う必要がありますか?後者の場合、サブビューとして追加された場合にそのコントローラーが誰であるかがわかるように、ファイルの所有者を指定するにはどうすればよいですか?

繰り返しになりますが、私は常にviewDidLoadビューコントローラでもこれを行います。

awakeFromNib、loadView、viewDidLoad、UIView.init、UIViewController.initなどに何を配置しますか?

これらのうち、私は心配しているだけviewDidLoadです。

他にどのような方法を頻繁に使用しますか?

  1. 手動で作成したコントロールに自動サイズ変更マスクを使用して、ユーザーインターフェイスの向きが適切に処理されるようにしてください。

  2. 画面の幅が320ptであると(多くの人がそうであるように)想定しないでください。self.view.size現在のビューのサイズが必要な場所を常に参照してください。

  3. コントロールが自動サイズ変更マスクを介してユーザーインターフェイスの向きの変更を処理できない場合は、必ずiOS5を使用しviewWillLayoutSubviewsて調整してください。

于 2012-05-30T14:03:50.210 に答える
0

典型的なMainWindow.nibのような非常に単純なペン先がありますが、これらはローカライズされたコンテンツを持たず、1行のコードで再現できます。このような場合、コードはペン先のアーカイブを解除するよりもはるかに高速です。

ペン先として説明することが不可能な非常に動的なレイアウトもあります。

それぞれの特定のケースで最も便利で効率的な方法を選択する必要があります。常にトレードオフがあります。賢明に選択してください。

于 2012-05-30T15:28:05.313 に答える