2013-06-05 53 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'是隻讀的。看來你必須自己繪製它。檢查我的編輯。 –

相關問題