如何从我创建的子类的实例访问变量?

时间:2011-04-18 16:23:33

标签: iphone objective-c

我是Objective-C的新手,希望能够将整数属性附加到我在Interface Builder中可以看到的每个物理按钮;我还需要许多其他变量,所以仅仅使用'Tag'属性是不够的。我已经创建了一个子类,但似乎无法从这个类的实例中改变这些新变量。

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".

任何帮助都会很棒,谢谢。

2 个答案:

答案 0 :(得分:3)

在Interface Builder中,您必须将Button的类型设置为自定义按钮。

在“Identity Inspector”下面是Custom Class。将其从UIButton设置为myButton。

答案 1 :(得分: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