UIベース5ディクショナリモデルクラス接頭辞ViewパッケージXib
4017 ワード
ディクショナリモデル
辞書を使うデメリット一般的に、設定データと取り出しデータは「文字列タイプのkey」を使用します.これらのkeyを作成する場合、エディタにはスマートなヒントがなく、 を叩く必要があります.文字列keyを手で叩くと、keyは を書き間違えやすい. Key書き間違えた場合、コンパイラは何の警告もエラーもなく、データの設定を間違えたり、データを間違えたりすることはありません.
モデルを使用するメリット モデルとは、データを格納するオブジェクトに特化したデータモデルであり、データがより専門的になることを示す である.モデルの設定データと取り出しデータはいずれもその属性によって行われ、属性名が書き間違えばコンパイラはすぐにエラーを報告するため、データの正確性が保証される .モデルアクセス属性を使用すると、コンパイラは一連のヒントを提供し、符号化効率 を向上させる.
モデル#モデル#モデルとは データの格納に特化するオブジェクト は一般に、Objectから直接継承されるオブジェクト である.の内部には、データ を格納するためのいくつかの属性があります.
instancetype instancetypeタイプ表示ではidと同様に任意のオブジェクトタイプ を表すことができる. instancetypeは戻り値タイプでのみ使用でき、idのようにパラメータタイプでは では使用できません. instancetypeはidよりも多くの利点があります.コンパイラはinstancetypeの真のタイプ を検出します. instancetypeは、戻り値 にのみ使用できます.
ディクショナリ回転モデルの構築方法辞書回転モデルのプロセスは、モデル内部にカプセル化することが望ましい モデルは、辞書パラメータを入力可能な構造方法 を提供するべきである.
クラス接頭辞 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 方法2
注意点 1コントロールには2つの作成方法があります コードによる作成 初期化時に必ずinitWithFrameが呼び出される:メソッド xibstoryboardで作成 初期化時にinitWithFrame:メソッドは呼び出されず、initWithCoderのみが呼び出される:メソッド 初期化が完了するとawakeFromNibメソッド が呼び出されます.
サブコントロールの追加、基本プロパティの設定など、コントロールの初期化時に初期化操作を行う場合があります. この場合、コントロールの作成方法に従って、initWithFrame:、initWithCoder:、awakeFromNibのどの方法で を操作するかを選択する必要がある.
辞書を使うデメリット
dict[@"name"] = @"Jack";
NSString *name = dict[@"name"];
モデルを使用するメリット
app.name = @"Jack";
NSString *name = app.name;
モデル#モデル#
instancetype
ディクショナリ回転モデルの構築方法
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)xxxWithDict:(NSDictionary *)dict;
クラス接頭辞
コントロールが見えない可能性はありますか?
Viewのパッケージ
UIButton、UIImageView、UILabelの選択
Xib
Xibとstoryboardの比較
Xibのロード
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib " owner:nil options:nil]
UINib *nib = [UINib nibWithNibName:@"xib " bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil options:nil];
注意点