1

気まぐれで妹のために簡単なカードゲームをコーディングしています。私は UIButtons を使用しています: デフォルトの状態は下向きで、選択された状態は上向きです。ボタンがめくられたことがあるかどうかを示すブール値のプロパティをボタンに持たせる必要があります。そうでない場合は、true に設定されます (そうすれば、フリップごとにランダムにカードを引くことはありません)。CardGameButton という UIButton のカテゴリを作成してみました。.h ファイル内:

@interface UIButton (CardGameButton)
@property (nonatomic) BOOL discovered;
@end

.m ファイル内:

@implementation UIButton (CardGameButton)
@dynamic discovered;
@end

本当に必要なのはこれだけです。IB でこれを使用するにはどうすればよいですか? CardGameButtons にしたい画面にたくさんの UIButtons があります。しかし、View Controller の UIButton への呼び出しを CardGameButton に切り替えようとすると、CardGameButton はタイプではないことがわかります (はい、ファイルをインポートしました)。また、ストーリーボードの UIButton のクラスを CardGameButton に切り替えようとすると、コンソールに「不明なクラス」であると表示されます。UIButton のサブクラス化を試みましたが、うまくいきませんでした (RoundedRectButtons に追加のプロパティを追加する必要があるだけです。RoundedRectButton をサブクラス化できないため、適切に表示されません)。IBでこれを機能させるにはどうすればよいですか?

4

2 に答える 2

1

CardGameButtons代わりにカテゴリである場合、UIButton のサブクラスであるかのように扱っています。as として宣言するものはすべて標準としてプロパティUIButtonを持ちますが、それ自体はものではないため、 a をdiscovered「作成」することはできませんCardGameButtons

于 2013-06-05T15:56:15.540 に答える
0

カテゴリはタイプではありません。それらは、クラスにいくつかの拡張動作を追加するために使用されます。

UIButtonサブクラス化して呼び出してみることをお勧めしますCardGameButtonBOOLプロパティをそのインターフェイスに追加します。「丸い四角形のボタンは別のサブクラスではありません」に設定することで、丸い四角形のボタンにすることができますbuttonType。. 次にオーバーライドUIButtonTypeRoundedRect

- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
    if(event.type == UIEventTypeTouches){
        self.discovered = YES; // or handle the logic as you want here
    }
    [super sendAction:action to:target forEvent:event];
}

IB からビューに a を追加しUIButton、そのクラスを作成したサブクラスに追加して、そのタイプを round rect に設定できます。


編集:あなたが述べたように、buttonType実際にはreadOnlyであるため、それを使用して丸い四角形のボタンを描画することはできません。しかし、それを描くのは難しくないことがわかりました。

このチュートリアルを確認してください。CALayerのプロパティUIButtonと を使用してそれを行う方法を示しますUIBezeirPath

于 2013-06-05T16:09:03.790 に答える