0

我有类“按钮”,它是 CCNode 的子类。由于按钮(如计算机按钮),不是 CCLabelBMFont 或 CCSprite,因此我将其子类化为 CCNode。此外,我还扩展了 CCLabelBMFont 与子“CCLabelCustom”,它有自己的一些奇特逻辑。这样,我将 CCLabelCustom *buttonLabel 和 CCSprite *buttonSprite 移动为“Button”的 iVar。我希望“Button”尽可能抽象,没有默认的 buttonLabel 或 buttonSprite。问题是,我如何去初始化 CCLabelCustom 和 CCSprite?CCLabelCustom 有一些带有四个以上参数的长初始化,并且可以分配其他属性。

// Rough Idea to help elaborate my classes
@interface Button : CCNode

@property (nonatomic, strong) CCLabelCustom *buttonLabel;
@property (nonatomic, strong) CCSprite *buttonSprite;

@end


// Rough Idea to help elaborate my classes
@interface CCLabelCustom : CCLabelBMFont

@property (nonatomic, strong) SomeProperty *someVar;
@property (nonatomic, strong) AnotherProperty *anotherVar;

-(void)fancyMethod;
-(void)initWithSomething:(Something*)something andAnother:(Another*)another alongWith:(Fun*)fun;

@end

有什么我不知道的架构吗?有什么方法可以让我在课堂外用两个 iVar 初始化“Button”吗?我不想要任何可以在“Button”类中定义的默认值。我想从外层做。先感谢您。

4

1 回答 1

1

把方法initWithSomething:(Something*)something andAnother:(Another*)another alongWith:(Fun*)fun;放在你的Button课堂上。在你的这个初始化上Button,也 CCLabelCustom用这些参数初始化。

然后,当您在类外初始化按钮时,使用此方法并传递参数。

PS.:该方法initWithSomething必须返回一个ID对象:-(id)initWithSomething:

例子:

// Outside class
Button *button = [[Button alloc] initWithSomething:something andAnother:another alongWith:fun];

...
// Your Button custom init
- (id)initWithSomething:(Something*)something andAnother:(Another*)another alongWith:(Fun*)fun
{
    self = [self init];
    if (self) {
        self.buttonLabel = [[CCLabelCustom alloc] initWithSomething:something andAnother:another alongWith:fun]
    }
    return self;
}
于 2013-07-24T16:42:24.107 回答