0

カスタムの再利用可能なビュー コンポーネントを作成するためのベスト プラクティスなどを探し回っています。これまでのところ、カスタム 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 に接続されています。

そして...これはうまくいきます。完璧に。私が使用しているすべての場所で正しくレンダリングされ、例外もクリッピングも、私が見ることができるおかしなビジネスもまったくありません。

ここのところ。私は次のことを少し心配しています:

  1. この技術はどこにも見たことがありません。もちろん、私は比較的短い時間 (受動的に数時間) しか探していませんでした。
  2. initWithFrame: / Coder: などの推奨されるオーバーライドは行っていません。
  3. 私は現在、これを非常に限られた領域でしか使用していないためビューが表示されなくなる、描画パフォーマンスが不明である、メモリ リークを完全にチェックしていないなどの状況について十分にテストされているとは言えません。
  4. 私は何かが欠けているとほぼ確信しています。使っていくとすぐに見つかる可能性が高いですが、全部は見つからないかもしれません。

私よりもUIViewの経験が豊富な人は、頭を少し貸してくれますか? これは良い考えですか?恐ろしい「なんてことを考えているの?」というアイデアですか?私を待っている驚きはありますか?このような単純なカスタム ビューを作成する方法について読むべきものはありますか?

4

2 に答える 2

1

初期化子に関する Appleのドキュメントを読む必要があります。Mike Ash の初期化子に関する投稿もあります。初期化子は難しくありませんが、コメントで既に述べたように、現在のコードで見つけることができるように、いくつかの微妙な問題があります。

于 2012-06-06T08:10:35.833 に答える