ストーリーボードを使用しない単純なアプリケーションの作成を練習したいと思います。私はプログラム的に(ゆっくり)制約を行うことができますが、私はMVCに私のコードを分離練習したいと思います。プログラム上の制約を記述するための特定の場所/方法がありますか?それとも問題じゃないの?MVCのプログラム制約を置く場所
答えて
コメントの良い議論。私の考えは、その議論に基づいていますか?
- 、彼らが働く場所View Controllerのライフサイクルの早い:質問はあなたの制約を課す、主観的であることを理解し
。
- 可能な限りビューを閉じる。
- よくあることならば、できるだけ普遍的なものにしてください。
- の詳細をすべて理解してください。
制約にこだわっ
を(!あなたはそれに降りたときにそれは階層、UI、でもデータベースのテーブルに適用できます。質問が制約に限定されるものではなく、理解)、そして私の答え.. ..
(1)UIViewController
とUIView
ライフサイクルを使用してください。
は、一般的に、ビューのライフサイクルはloadView
、viewDidLoad
、viewWillAppear
、viewWillLayoutSubviews
、viewDidLayoutSubviews
、およびviewDidAppear
です。 great SO answer detailing this.
私はloadView
が早すぎる制約のあるはなく、viewDidLoad
を信じ- **あなたは、フレームのサイズを知ることが期待されていない提供します。多くの人がviewDidLayoutSubviews
がそのための適切な場所だと言いますが、私はviewWillLayoutSubviews
ほとんどの時間が同様に機能することを発見しました。いずれにしても、できるだけ早く制約を設定してください!
(2)可能な限り視界に近づけてください。
サブビューがある場合 - オブジェクトの「ツールバー」クラスがあります。できるだけ多くの制約をクラス内にコーディングする必要があります。例えば、私のツールバーでは、それはスライドアウトし、ボタンを持ち、向きに合わせて回転します。 の制約がありませんこれらのクラスはオリエンテーションのためのものです - のオーナーはそれをインスタンス化するビューコントローラです
(3)普遍化してください。
私はいくつかのアプリでこのツールバーを使用する予定です。だから私がやった最初のことはフレームワークに追加することでした。このフレームワークは、私が写真編集エクステンションを送ったアプリを持っていて、「編集」画面が可能な限り同じであるために必要でした。最後に私はすべて私の制約がそこに移動します。 (できるだけ多くは)私が信じるものは何でも再利用可能です。
(4)アプリの特定の要件を理解してください。
これは明らかです。さまざまな向きのコードを作成する必要がある場合は、配列を使用して配列をアクティブ/非アクティブにします。 (YES、よくある間違いはそれらを交換している!それはいくつかの主要な頭痛のために自分自身を設定しています。)
あなたが `のisActive = true1を設定し、制約を宣言し、アクティブなものを維持し、それを忘れることができます。その制約の定数または乗数を調整する必要がある場合は、という名前でという名前を付けてから変更する必要があります。
私の結論?自動レイアウトは非常に便利なツールです。しかしの配置は、「オートレンタルのためのOOPアプリケーションのコーディング方法」や「レンタルのためのデータベースの設計方法」を尋ねるようなものです。それだけではなく、多くの答えがあります。これらは私が従うことを試みる "規則" - YMMVです。
このスタイルの開発を開始するには、ストーリーボードなしで完全なコードで複雑なアプリケーションを設定するという非常に深い例がありますので、Let's Build That Appをチェックすることをおすすめします。
彼が制約を構成する方法は、ViewController
からビューコードが分離されるように、UIView
のカスタム実装を使用しています。次にviewDidLoad
メソッドでUIView
の実装をself.view = MyView()
のようにインスタンス化できます。
私はこのようなアプリをいくつか書いています。大きな欠点は、すばやく調整するのが非常に難しくなることがあり、実際に使用できるさまざまな種類のすべての制約について学ぶ必要があることです。
Here's a pastebinこれを行う際に私が使用しました。私はこれが役立つことを願っています
- 1. マスターページにない場合はナビゲーションメニューを置く場所 - asp mvc
- 2. Asp.net MVCのモバイルデバイスのリダイレクトコードを置く場所
- 3. コマンドラインJavaプログラム用のjarファイルを置く標準的な場所
- 4. MVC - blittingデータを配置する場所
- 5. カスタムオープンキャレットエクステンションを置く場所
- 6. sdkファイルを置く場所
- 7. ViewModelを置く場所
- 8. プロジェクトファイルを置く場所は?
- 9. ocamlopt:cmxとcmiを置く場所を制御するオプション
- 10. 制約レイアウト変更制約をプログラム
- 11. MVCルーティング制約
- 12. Drupal 7 hook_cron - 置く場所
- 13. Rubyのスーパークラスのユーティリティメソッドを置く場所
- 14. buddypressのCSSファイルを置く場所
- 15. Joomla:サブメニューを別の場所に置く
- 16. WSO2APIM:XSLTメディエータのXSLTファイルを置く場所
- 17. サブプロットの場所に凡例を置く
- 18. 場所の中にマーカーを置く
- 19. プログラムの追加制約は、自動レイアウトの制約を破る
- 20. Phonegapビルド - アプリケーションアイコンとスプラッシュスクリーンファイルを置く場所
- 21. Codeigniter:URLから変数を置く場所
- 22. CakePHP: 'Services'ロジックを置く場所
- 23. cellforrowatindexpathにdrawrectを置く場所は?
- 24. レールにユーティリティスクリプトを置く場所
- 25. djangoにカスタムバリデーターを置く場所は?
- 26. Rails + processing.js - .pdeファイルを置く場所は?
- 27. Symfony2にsqlファイルを置く場所
- 28. Qt with Lua | luaファイルを置く場所
- 29. Django:グローバルモデルを置く場所は?
- 30. Emacs:psvn.elファイルを置く場所は?
たとえば、UIView(またはUITableViewCell)のサブクラスに制約を配置し、そのビューをUIViewControllerに追加するか、tableView内のcustomerセルを使用することができます。 – mat
@matしかし、制約が課せられるべき "ベストプラクティス"や組み込みメソッドはありませんか? – RubberDucky4444
私は個人的に 'setupViews()'というメソッドを作成し、すべてのサブビューと制約を追加してから、そのメソッドをinit関数で呼び出します。私はこれがベストプラクティスであるとは確信していません;) – mat