2017-04-25 8 views
0

ストーリーボードを使用しない単純なアプリケーションの作成を練習したいと思います。私はプログラム的に(ゆっくり)制約を行うことができますが、私はMVCに私のコードを分離練習したいと思います。プログラム上の制約を記述するための特定の場所/方法がありますか?それとも問題じゃないの?MVCのプログラム制約を置く場所

+1

たとえば、UIView(またはUITableViewCell)のサブクラスに制約を配置し、そのビューをUIViewControllerに追加するか、tableView内のcustomerセルを使用することができます。 – mat

+0

@matしかし、制約が課せられるべき "ベストプラクティス"や組み込みメソッドはありませんか? – RubberDucky4444

+1

私は個人的に 'setupViews()'というメソッドを作成し、すべてのサブビューと制約を追加してから、そのメソッドをinit関数で呼び出します。私はこれがベストプラクティスであるとは確信していません;) – mat

答えて

1

コメントの良い議論。私の考えは、その議論に基づいていますか?

  • 、彼らが働く場所View Controllerのライフサイクルの早い:質問はあなたの制約を課す、主観的であることを理解し

  • 可能な限りビューを閉じる。
  • よくあることならば、できるだけ普遍的なものにしてください。
  • の詳細をすべて理解してください。

制約にこだわっ

を(!あなたはそれに降りたときにそれは階層、UI、でもデータベースのテーブルに適用できます。質問が制約に限定されるものではなく、理解)、そして私の答え.. ..

(1)UIViewControllerUIViewライフサイクルを使用してください。

は、一般的に、ビューのライフサイクルはloadViewviewDidLoadviewWillAppearviewWillLayoutSubviewsviewDidLayoutSubviews、およびviewDidAppearです。 great SO answer detailing this.

私はloadViewが早すぎる制約のあるはなく、viewDidLoadを信じ- **あなたは、フレームのサイズを知ることが期待されていない提供します。多くの人がviewDidLayoutSubviewsがそのための適切な場所だと言いますが、私はviewWillLayoutSubviewsほとんどの時間が同様に機能することを発見しました。いずれにしても、できるだけ早く制約を設定してください!

(2)可能な限り視界に近づけてください。

サブビューがある場合 - オブジェクトの「ツールバー」クラスがあります。できるだけ多くの制約をクラス内にコーディングする必要があります。例えば、私のツールバーでは、それはスライドアウトし、ボタンを持ち、向きに合わせて回転します。 の制約がありませんこれらのクラスはオリエンテーションのためのものです - のオーナーはそれをインスタンス化するビューコントローラです

(3)普遍化してください。

私はいくつかのアプリでこのツールバーを使用する予定です。だから私がやった最初のことはフレームワークに追加することでした。このフレームワークは、私が写真編集エクステンションを送ったアプリを持っていて、「編集」画面が可能な限り同じであるために必要でした。最後に私はすべて私の制約がそこに移動します。 (できるだけ多くは)私が信じるものは何でも再利用可能です。

(4)アプリの特定の要件を理解してください。

これは明らかです。さまざまな向きのコードを作成する必要がある場合は、配列を使用して配列をアクティブ/非アクティブにします。 (YES、よくある間違いはそれらを交換している!それはいくつかの主要な頭痛のために自分自身を設定しています。)

あなた `のisActive = true1を設定し、制約を宣言し、アクティブなものを維持し、それを忘れることができます。その制約の定数または乗数を調整する必要がある場合は、という名前でという名前を付けてから変更する必要があります。

私の結論?自動レイアウトは非常に便利なツールです。しかしの配置は、「オートレンタルのためのOOPアプリケーションのコーディング方法」や「レンタルのためのデータベースの設計方法」を尋ねるようなものです。それだけではなく、多くの答えがあります。これらは私が従うことを試みる "規則" - YMMVです。

1

このスタイルの開発を開始するには、ストーリーボードなしで完全なコードで複雑なアプリケーションを設定するという非常に深い例がありますので、Let's Build That Appをチェックすることをおすすめします。

彼が制約を構成する方法は、ViewControllerからビューコードが分離されるように、UIViewのカスタム実装を使用しています。次にviewDidLoadメソッドでUIViewの実装をself.view = MyView()のようにインスタンス化できます。

私はこのようなアプリをいくつか書いています。大きな欠点は、すばやく調整するのが非常に難しくなることがあり、実際に使用できるさまざまな種類のすべての制約について学ぶ必要があることです。

Here's a pastebinこれを行う際に私が使用しました。私はこれが役立つことを願っています

関連する問題