2011-04-18 150 views
0

我是Objective-C的新手,希望能夠將一個整數屬性附加到每個物理按鈕,我可以在界面生成器中看到;我還需要許多其他變量,所以只需使用「標記」屬性是不夠的。我創建了一個子類,但似乎無法改變這個類的實例中的這些新變量。如何從我創建的子類的實例訪問變量?

myButton.h--------- 

@interface myButton : UIBUtton 
{ 
    int hiddenNumber; 
} 

@property(nonatomic, assign) int hiddenNumber; 


myButton.m-------- 
#import "myButton.h" 

@implementation myButton 
@synthesize hiddenNumber; 


ViewController.h------- 
IBOutlet myButton *button1; // This has been connected in Interface Builder. 

ViewController.m------- 
[button1 setAlpha:0]; // This works (one of the built-in attributes). 
[button1 setHiddenNumber:1]; // This won't (one of mine)! It receives a 'Program received signal: "SIGABRT". 

任何幫助將是偉大的,謝謝。

回答

3

在Interface Builder中,您必須將Button的類型設置爲您的自定義按鈕。

在「身份檢查器」下是自定義類。將它從UIButton設置爲myButton。

+0

感謝馬克看看,我會嘗試這一點,如果我有任何問題,我我還可以嘗試另一點建議。 – indoorGinger 2011-04-20 07:17:20

1

UIButton的子類化問題只是爲了添加屬性來存儲數據,您最終只能將自己限制爲自定義按鈕類型。由於這些按鈕是類集羣的一部分,因此不再需要舍入。我的建議?使用Associative References。在這篇文章Subclass UIButton to add a property

的UIButton + Property.h

#import <Foundation/Foundation.h> 

@interface UIButton(Property) 

@property (nonatomic, retain) NSObject *property; 

@end 

的UIButton + Property.m

#import "UIButton+Property.h" 
#import <objc/runtime.h> 

@implementation UIButton(Property) 

static char UIB_PROPERTY_KEY; 

@dynamic property; 

-(void)setProperty:(NSObject *)property 
{ 
    objc_setAssociatedObject(self, &UIB_PROPERTY_KEY, property, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 

-(NSObject*)property 
{ 
    return (NSObject*)objc_getAssociatedObject(self, &UIB_PROPERTY_KEY); 
} 

@end 
+0

嗨喬,謝謝你的回答,請原諒我對此的無知,但是有什麼缺點是不能使用'圓角矩形'按鈕? – indoorGinger 2011-04-20 07:16:20

+0

如果您從不想使用它們,則無。你基本上將你的自己鎖定在一個自定義的'UIButton'中,並且不能將你的自定義屬性用於未來的任何'+(id)buttonWithType:(UIButtonType)buttonType'方法,因爲它們從類集羣返回不同的按鈕類型。此外,您不必在界面構建器中更改自定義類以使用屬性。只需在源文件中包含類別標題即可。 – Joe 2011-04-20 12:53:42

相關問題