0

カスタマイズされた UIButton を作成しようとしています。(変化する)画像、いくつかの情報テキスト、そしてもちろんタイトルなどのより標準的なものがあります。インターフェイス ビルダーとストーリーボードを使用して、アプリのほとんどのデザイン作業を行っています。

このようなカスタム UIButton を作成するためのベスト プラクティスは何ですか?

ボタンはより標準的な要素から構築できるため、サブクラス化せずに図面を引き継ぐことにしました。

代わりに、UIButton をサブクラス化し、UIImageView、UILabel などのサブビューを作成して追加しようとしました。境界が awakeFromNib に設定されておらず、initWithFrame が呼び出されないため、すべてを配置するタイミングがわかりませんでした。最終的に、UIViewController が viewDidAppear で呼び出す別のメソッドを追加しました。

その後、おそらくサブクラス化せずに UIViewController の viewDidLoad または viewDidAppear でボタンを構築できることに気付きましたが、ボタンの境界がまだ利用できないことに再び気付きました。

したがって、どちらが最適ですか:

  1. すべてをサブクラス化して描画する
  2. 他の UIView の合成によるサブクラス化と構築
  3. 外側のビューでボタンを作成する
  4. 他の方法は…?

また、フレームワーク内のすべてが、親が自動レイアウトを使用しているときにサブビューを手動でレイアウトすることに対して共謀しているように見えるので、より良い方法があるに違いないと思います。

4

2 に答える 2

1

別の UIView クラスを 1 つ作成し、その中にすべてのボタンを配置します。
次に、そのビューをView Controllerにサブクラス化します。

お気に入り:

1) ボタンを使用して 1 つのビューを作成し、そのビューをカスタム .xib とビューにクラス名として指定します。

つまり、「MultipleChoiceLayout」という名前のボタンを含む 1 つのカスタム ビューを作成しています
- MultipleChoiceLayout.h
- MultipleChoiceLayout.m
- MultipleChoiceLayout.xib

MultipleChoiceLayout をファイルの所有者に定義し、カスタム ビューにも定義します。
ここに画像の説明を入力

2) このカスタム ビューを親ビューに追加します。

    NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"MultiChoiceLayout" owner:self options:nil];

    MultiChoiceLayout *multipleChoiceLayout = [[MultipleChoiceLayout alloc] initWithArray:array];

   [ParentView addSubview:multipleChoiceLayout];

親ビューでカスタムビューを初期化する方法を見てください。

配列を「MultipleChoiceLayout」クラスに渡し、multichoicelayout クラスで self を定義します。

-(id)initWithArray:(NSArray*)array
   {
    self = [array objectAtIndex:0];
    if(self) {

     }
    return self;
}
  • ここで、親から self を渡すことによって、カスタム ビュー オブジェクトを親からカスタム ビューに渡します (上記のスニペットを参照)。ボタンをクリックするたびに、カスタム ビューで定義したメソッドが自動的に呼び出されます。あなたは何も維持する必要はありません

これが役立つことを願っています。

于 2013-04-11T04:32:58.633 に答える
1

このようなカスタム コントロールを構築するための一般的な方法がいくつかあります。あなたの場合、 のサブクラスはUIControl標準よりも柔軟性を提供するUIViewため、ボタンの相互作用のためのカスタム ジェスチャを作成する必要はありません。UIButton私の経験から、サブクラス化は常に頭痛の種になります。

別の回答が示すように、別の xib でコントロールを作成することも、再利用性のために良い考えです。一般に、UIControl サブクラスにコンポーネント (UIImageView など) をセットアップさせる方が、View Controller に処理させるよりも賢明です。この場合、コントロールはinitWithCoder:xib からロードする場合のようなメッセージを取得するため、サブビューを適切にセットアップできます。

自動レイアウトの使用に関しては、アプリの残りの部分で使用されている場合は、カスタム コントロールも使用する必要があります。フレームの自動レイアウトと手動設定を混在させないでください。物事が壊れます。

うまくいけば、これはあなたの質問のいくつかに答えます.

于 2013-04-11T05:20:47.603 に答える