UIベース5ディクショナリモデルクラス接頭辞ViewパッケージXib

4017 ワード

ディクショナリモデル
辞書を使うデメリット
  • 一般的に、設定データと取り出しデータは「文字列タイプのkey」を使用します.これらのkeyを作成する場合、エディタにはスマートなヒントがなく、
  • を叩く必要があります.
    dict[@"name"] = @"Jack";
    NSString *name = dict[@"name"];
    
  • 文字列keyを手で叩くと、keyは
  • を書き間違えやすい.
  • Key書き間違えた場合、コンパイラは何の警告もエラーもなく、データの設定を間違えたり、データを間違えたりすることはありません.
    モデルを使用するメリット
  • モデルとは、データを格納するオブジェクトに特化したデータモデルであり、データがより専門的になることを示す
  • である.
  • モデルの設定データと取り出しデータはいずれもその属性によって行われ、属性名が書き間違えばコンパイラはすぐにエラーを報告するため、データの正確性が保証される
  • .
  • モデルアクセス属性を使用すると、コンパイラは一連のヒントを提供し、符号化効率
  • を向上させる.
    app.name = @"Jack";
    NSString *name = app.name;
    

    モデル#モデル#
  • モデルとは
  • データの格納に特化するオブジェクト
  • は一般に、Objectから直接継承されるオブジェクト
  • である.
  • の内部には、データ
  • を格納するためのいくつかの属性があります.

    instancetype
  • instancetypeタイプ表示ではidと同様に任意のオブジェクトタイプ
  • を表すことができる.
  • instancetypeは戻り値タイプでのみ使用でき、idのようにパラメータタイプでは
  • では使用できません.
  • instancetypeはidよりも多くの利点があります.コンパイラはinstancetypeの真のタイプ
  • を検出します.
  • instancetypeは、戻り値
  • にのみ使用できます.
    ディクショナリ回転モデルの構築方法
  • 辞書回転モデルのプロセスは、モデル内部にカプセル化することが望ましい
  • モデルは、辞書パラメータを入力可能な構造方法
  • を提供するべきである.
    - (instancetype)initWithDict:(NSDictionary *)dict;
    + (instancetype)xxxWithDict:(NSDictionary *)dict;
    

    クラス接頭辞
  • Objective-Cを使用してiOSプログラムを開発する場合は、各クラス名の前に接頭辞を付けて、このクラスが誰が開発を担当しているかを識別する
  • が望ましい.
  • はN個人が同じクラスを開発したことを防止することを目的とし,
  • と衝突した.
  • 例えば張三、李四は同じプロジェクトでそれぞれButtonクラスを開発したが、このようなプログラムは実行できない-解決策:張三のクラス名はZSbutton、李四のクラス名はLSButton
  • と呼ばれている.
  • 構築済みのプロジェクトでは、プロジェクト内のClass prefixにクラスプレフィックス名を追加します.これにより、後で新規作成する際にクラスプレフィックス
  • が自動的に追加されます.
    コントロールが見えない可能性はありますか?
  • 幅高さは実は0
  • である.
  • 位置が正しくない(画面を超える)
  • hidden == YES
  • alpha <= 0.01
  • 背景色が設定、内容が設定されていない
  • .
  • は、テキストの色が背景の色と同じ
  • である可能性があります.

  • Viewのパッケージ
  • ビュー内部のサブコントロールが多い場合は、一般的にビューをカスタマイズし、内部のサブコントロールの作成を遮断し、外部の関心を持たないようにすることを考慮します.
  • 外部から対応するモデルデータがviewに転送され、viewがモデルデータを取得すると内部のサブコントロールに対応するデータ
  • が設定される.
  • パッケージコントロールの基本手順
  • initWithFrame:メソッドにサブコントロールを追加し、便利な構築方法を提供し、initメソッドの内部でinitWithFrameメソッド
  • が自動的に呼び出される.
  • layoutSubviewsメソッドでサブコントロールのframeを設定する(superのlayoutSubviewsを必ず呼び出す)
  • モデル属性を追加し、モデル属性setメソッドでサブコントロール上の
  • にデータを設定する.

    UIButton、UIImageView、UILabelの選択
  • の特徴
  • UIButton
  • 文字表示もできるし、画像(2枚の画像、背景画像、コンテンツ画像を表示できる)
  • も表示できる.
  • ハイライトを長押しすると画像文字
  • が切り替わります
  • 直接addTarget...方法で傍受クリック
  • UIImageView
  • は画像を表示することができて、直接addTarget...方法を通じて
  • を傍受することができません
  • UILabel
  • 文字を表示することができて、直接addTarget...方法を通じて
  • を傍受することができません

  • 選択
  • は表示データのみであり、推奨選択UIImageView、UILabel
  • をクリックする必要はない.
  • データを表示するだけでなく、クリックを傍受する必要があります.
  • UIButton
  • の選択を推奨
  • 実はUIImageView、UILabelもジェスチャー認識器で傍受(後述)
  • コントロールを長押しすると表示内容が変わります
  • 考慮せずにUIButton(UIButtonはhighlightedという状態があるため)
  • を選択
  • 同時に2枚の画像を表示します:背景のピクチャー、内容のピクチャー
  • 考慮せずUIButton
  • を選択


    Xib
    Xibとstoryboardの比較
  • 共通点:
  • は、ソフトウェアインタフェース
  • を記述するために使用される.
  • は、Interface Builderツールを使用して
  • を編集します.
  • 本質はすべてコードに変換してコントロール
  • を作成することである.
  • 異なる点
  • Xibは、ローカルUIインタフェース
  • を記述するための軽量レベルである.
  • Storyboardはソフトウェア全体の複数のインタフェースを記述するための重量級であり、複数のインタフェース間のジャンプ関係
  • を示すことができる.

    Xibのロード
  • 方法1
  • NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib   " owner:nil options:nil]
    
  • 方法2
  • UINib *nib = [UINib nibWithNibName:@"xib   " bundle:nil];
    NSArray *views = [nib instantiateWithOwner:nil options:nil];
    

    注意点
  • 1コントロールには2つの作成方法があります
  • コードによる作成
  • 初期化時に必ずinitWithFrameが呼び出される:メソッド
  • xibstoryboardで作成
  • 初期化時にinitWithFrame:メソッドは呼び出されず、initWithCoderのみが呼び出される:メソッド
  • 初期化が完了するとawakeFromNibメソッド
  • が呼び出されます.

  • サブコントロールの追加、基本プロパティの設定など、コントロールの初期化時に初期化操作を行う場合があります.
  • この場合、コントロールの作成方法に従って、initWithFrame:、initWithCoder:、awakeFromNibのどの方法で
  • を操作するかを選択する必要がある.