我正在为我的妹妹一时兴起一个简单的纸牌游戏。我正在使用UIButtons:默认状态是面朝下,选择状态正面朝上。我需要按钮有一个布尔属性,告诉我它们是否曾被翻过来。如果没有,它被设置为true(这样我不只是在每次翻转时绘制随机卡)。我尝试创建一个名为CardGameButton的UIButton类。在.h文件中:
@interface UIButton (CardGameButton)
@property (nonatomic) BOOL discovered;
@end
在.m文件中:
@implementation UIButton (CardGameButton)
@dynamic discovered;
@end
这就是我真正需要的。我如何在IB中使用它?我在屏幕上有一堆UIButtons,我想成为CardGameButtons。但是当我尝试将我的视图控制器中的UIButton调用切换到CardGameButton时,它告诉我CardGameButton不是一个类型(是的,我导入了文件)。当我尝试将故事板中的UIButtons类转换为CardGameButtons时,控制台告诉我它们是“未知类”。我尝试了子类化UIButton,但是这不起作用(我只需要它们是带有额外属性的RoundedRectButtons,因为你不能将RoundedRectButton子类化,它们将无法正确显示)。我如何在IB中完成这项工作?
答案 0 :(得分:1)
您正在将CardGameButtons
视为UIButton的子类,而不是它是一个类别。您声明为UIButton
的任何内容都会将discovered
属性作为标准,但您无法“创建”CardGameButtons
,因为它本身并不是一件事。
答案 1 :(得分: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];
}
您可以从IB中将UIButton
添加到视图中,然后将其类添加到创建的子类中,并将其类型设置为圆形矩形。
修改:正如您所说,buttonType
实际上是readOnly
,因此我们无法使用它来绘制圆形矩形按钮。但事实证明,绘制起来并不难。
检查this tutorial。它显示了如何使用CALayer
的{{1}}属性并使用UIButton
来执行此操作。