カスタムの再利用可能なビュー コンポーネントを作成するためのベスト プラクティスなどを探し回っています。これまでのところ、カスタム UIView サブクラスが進むべき道のようです。
この場合、必要なのはラベルに簡単にアクセスできる固定サイズのビューだけであり、便利な初期化子があれば便利です。ラベルにタグを付けて定数を使用することもできますが、これを考えると不要のようです (UIKit インポートのようなボイラープレートが削除されました) (ARC を使用):
// .h file
@interface MyView : UIView
@property (nonatomic, weak) IBOutlet UILabel *label;
+ (id)withText:(NSString *)text;
@end
// .m file
@implementation MyView
+ (id)withText:(NSString *)text {
MyView *view = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
owner:nil
options:nil] objectAtIndex:0];
view.label.text = text;
return view;
}
@end
(編集:クラスメソッドに変更されました。私の懸念はまだ変わっていませんが、全体的に少し疑わしいです)
MyView.xib ファイルの唯一の最上位要素 (UIView) にはカスタム クラスが MyView に設定されており、アウトレットは FileOwner に接続されています。
そして...これはうまくいきます。完璧に。私が使用しているすべての場所で正しくレンダリングされ、例外もクリッピングも、私が見ることができるおかしなビジネスもまったくありません。
ここのところ。私は次のことを少し心配しています:
- この技術はどこにも見たことがありません。もちろん、私は比較的短い時間 (受動的に数時間) しか探していませんでした。
- initWithFrame: / Coder: などの推奨されるオーバーライドは行っていません。
- 私は現在、これを非常に限られた領域でしか使用していないため、ビューが表示されなくなる、描画パフォーマンスが不明である、メモリ リークを完全にチェックしていないなどの状況について十分にテストされているとは言えません。
- 私は何かが欠けているとほぼ確信しています。使っていくとすぐに見つかる可能性が高いですが、全部は見つからないかもしれません。
私よりもUIViewの経験が豊富な人は、頭を少し貸してくれますか? これは良い考えですか?恐ろしい「なんてことを考えているの?」というアイデアですか?私を待っている驚きはありますか?このような単純なカスタム ビューを作成する方法について読むべきものはありますか?