1

我有一层叫alayer,还有一个叫abutton的按钮,当点击按钮时,另一个叫blayer的层会显示在alayer中,而不是replaceScene,请看下面的代码,

图层.m

-(void)abuttonclicked:(id)sender
{
  blayer *blayer = [blayer node];
  blayer.position = ccp(1,1);
  [self addChild:blayer];
}

blayer.m 有一个叫做 bbutton 的按钮和一个叫做 bstring 的字符串值,我想点击 b 按钮,它会关闭 blayer(从 alayer 中删除 blayer),并将字符串值 bstring 传递给 alayer,请看下面的代码,

 -(void)bbuttonclicked:(id)sender
 {
  // how can do here to close its self(remove its self from alayer), and pass the bstring to alayer?
 }

谢谢。

附言。我可以使用 NSUserDefault 来传递字符串值,但我认为这是一种不好的方法,还有另一种传递值的方法吗?

4

2 回答 2

0

考虑到您的情况,我认为最好使用NSNotificationCenter。您可以在点击按钮时从 blayer 发布通知,并在 alayer 中添加观察者以准确响应想要的方式。

添加[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedNotification:) name:@"BlayerNotification" object:nil];一个layer的init和[[NSNotificationCenter defaultCenter] removeObserver:self];它的dealloc。

它的选择器如:

- (void)receivedNotification:(NSNotification *)notification {
    NSString *string = (NSString *)notification.object;
    NSLog (@"String received %@", string);
}

现在您可以在单击 hte 按钮时从 blayer 发布通知:

-(void)bbuttonclicked:(id)sender {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BlayerNotification" object:self];
    [self removeFromParentAndCleanup:YES];
}
于 2013-10-20T21:51:18.563 回答
0

也许要传递字符串,您可以在 ALayer.h/.m 中声明和实现一个属性

 @property(nonatomic,copy) NSString *stringFromLayerB;

在 bButtonClicked 时删除 bLayer :

 -(void)bbuttonclicked:(id)sender
 {
     ALayer *lay = (ALayer*) self.parent;
     lay.stringFromLayerB = @"Whatever you want to set";
     [self removeFromParentAndCleanup:YES];
 }

还有其他方法可以做到这一点。您可以实现回调机制、使用通知、某种委托协议绑定 BLayer 和 ALayer。一切都取决于您的真实(未说明)要求是什么。

于 2013-10-20T17:01:29.650 回答