2013-06-05 58 views
1

我正在编写一个简单的纸牌游戏为我的妹妹一时兴起。我使用UIButtons:默认状态是面朝下,选中状态是正面朝上。我需要按钮有一个布尔属性,告诉我他们是否曾经被翻转。如果没有,它会被设置为true(这样我就不会在每次翻转时画出随机卡片)。我尝试创建一个名为CardGameButton的UIButton类。在.h文件:如何在Interface Builder中使用自定义的UIButton类别?

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

在.m文件:

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

这确实是我所需要的。我如何在IB中使用它?我在屏幕上有一堆UIButton,我想成为CardGameButtons。但是当我尝试将我的视图控制器中的UIButton切换到CardGameButton时,它告诉我CardGameButton不是类型(是的,我导入了该文件)。当我尝试将故事板中的UIButton类转换为CardGameButtons时,控制台告诉我他们是“未知类”。我尝试了继承UIButton,但没有奏效(我只是需要它们是具有额外属性的RoundedRectButtons,并且因为无法继承RoundedRectButton,所以它们不能正确显示)。我如何在IB中完成这项工作?

+0

由于类别不能有属性,我建议你只需使用一个自定义按钮,并做任何你想要的图形,或者使用UIImageView和一个连接到它的轻击手势识别器作为你的“按钮”。 – rdelmar

回答

1

你对待CardGameButtons就好像它是UIButton的子类,而不是它的类别。您声明为UIButton的任何内容都将具有discovered属性作为标准属性,但您无法'创建'CardGameButtons,因为它本身不是问题。

+2

但类别不能添加任何存储,所以你不能添加任何属性(至少有一个具有支持ivar的属性)。 – rdelmar

0

分类不是类型。他们只是用来为课程添加一些扩展的行为。

我建议您尝试继承UIButton并将其称为CardGameButton。将BOOL属性添加到其接口。您仍然可以将其设置为圆形按钮,方法是将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]; 
} 

您可以将UIButton添加从IB视图,然后将其类的子类的创建,并设置其类型为圆矩形。


编辑:正如你所说,buttonType实际上是readOnly,所以我们不能用它来画一个圆矩形按钮。但事实证明,绘制它并不困难。

检查this tutorial。它显示了如何使用CALayer财产UIButton并使用UIBezeirPath

+0

buttonType虽然是只读属性。我在这里做错了什么? ' - (ID)的initWithCoder:(NSCoder *)aDecoder { \t如果(个体= [超级的initWithCoder:aDecoder]){ \t \t self.buttonType = UIButtonTypeRoundedRect; \t} }' – ThurnisH41ey

+0

其实你是对的。 'buttonType'是只读的。看来你必须自己绘制它。检查我的编辑。 –

相关问题