1

我一时兴起为我的妹妹编写了一个简单的纸牌游戏。我正在使用 UIButtons:默认状态是面朝下,选中状态是面朝上。我需要按钮有一个布尔属性,告诉我它们是否曾经被翻转过。如果不是,它被设置为真(这样我不只是在每次翻转时随机抽牌)。我尝试创建一个名为 CardGameButton 的 UIButton 类别。在 .h 文件中:

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

在 .m 文件中:

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

这真的是我所需要的。我如何在 IB 中使用它?我想成为 CardGameButtons 的屏幕上有一堆 UIButtons。但是当我尝试将视图控制器中对 UIButton 的调用切换到 CardGameButton 时,它告诉我 CardGameButton 不是一种类型(是的,我导入了文件)。当我尝试将情节提要中的 UIButton 类切换为 CardGameButtons 时,控制台告诉我它们是“未知类”。我尝试对 UIButton 进行子类化,但这不起作用(我只需要它们是具有额外属性的 RoundedRectButtons,并且由于您不能将 RoundedRectButton 子类化,因此它们将无法正确显示)。我如何在 IB 中完成这项工作?

4

2 回答 2

1

您将CardGameButtons其视为 UIButton 的子类,而将其视为类别。您声明为的任何内容都UIButton将具有discovered标准属性,但您不能“创建” a CardGameButtons,因为它本身不是事物。

于 2013-06-05T15:56:15.540 回答
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 将 a 添加到您的视图中,然后将其类添加到您创建的子类并将其类型设置为圆角矩形。


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

检查本教程。它展示了如何使用和 usingCALayer的属性来做到这一点。UIButtonUIBezeirPath

于 2013-06-05T16:09:03.790 回答