将标签的内容从一个视图控制器传送到另一个视图控制器

时间:2011-11-01 22:48:36

标签: ios

我正在创建一个简单的iOS游戏,它有一个跟踪用户分数的计数器,并将其显示在屏幕一角的UILabel中。当游戏中发生某些事情时,它会切换到屏幕上的游戏。我想在新视图的标签中显示上一个视图中标签的内容作为玩家得分。

我觉得应该有一个简单的方法吗?

提前致谢!

3 个答案:

答案 0 :(得分:0)

问题的根本原因是您已将游戏逻辑嵌入到用户界面中。分数不是用户界面的一部分,但无论如何你都把它放在那里。

如果您的游戏真的简单,请向您的应用代表添加一个跟踪分数的属性。用户界面的每个部分都可以在需要时访问该属性。

只要你超越了最简单的游戏,就应该将游戏逻辑分解为自己的类。该班负责管理游戏状态。在开始新游戏时实例化它,您可以将其传递给查看控制器,创建共享实例等。

我建议您阅读MVC

答案 1 :(得分:0)

只需将标签设为@property并使用self.navigationController.presentingViewController或类似内容即可访问第一个视图控制器:

@interface ViewControllerOne : UIViewController {
    IBOutlet UILabel *myLabelOne;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabelOne;

@end


@interface ViewControllerTwo : UIViewController {
    IBOutlet UILabel *myLabelTwo;
}

// myLabelTwo doesnt need to be a property, it could just be an ivar.  Up to you.
@property (nonatomic, retain) IBOutlet UILabel *myLabelTwo;

@end

@implementation ViewControllerTwo

- (void)viewDidLoad {
    [super viewDidLoad];
    self.myLabelTwo.text = [(ViewControllerOne *)self.navigationController.presentingViewController myLabelOne].text;
}


@end

UINavigationController Class Reference
UIViewController Class Reference
Properties in Objective-C 2.0

答案 2 :(得分:0)

远离你的观点一秒钟。您的标签和任何其他视图都是展示数据的地方,而不是存储数据。您希望在屏幕上分享的是得分,这是玩家所在州的一部分。

创建一个Player对象。给它一个score属性。将相同的Player实例传递给两个视图的控制器。现在,您有一个由多个控制器共享的模型,并在许多视图中显示。控制器可以潜在地更新模型,而另一个控制器可以访问新状态以在其视图中显示。