所以我从概念上坚持构建我的应用程序。我读了很多论坛,但我想我需要尝试新的路线。继承人试图做的事情。
我创建了一个游戏,每个级别加载一个不同的字符串供用户玩。现在,关卡的字符串存储在plist中。有5个类别(数组),每个类别包含20个不同的字符串(即20个级别),因此总共有100个级别。
当用户启动游戏时,他们会到达“LevelSelect”视图,其中包含一个选择器。拣货员有两个组成部分。第一个组件是类别列表,第二个组件是该类别中的级别列表。用户选择他们想要播放的级别,然后按“开始”按钮调出“GamePlay”视图(一组完全不同的.h,.m和.xib文件)。
我的问题: 我不知道如何让所选级别出现在Gameplay课程的屏幕上。我拥有所有机器游戏工作,所以如果我在viewDidLoad中创建一个字符串,游戏似乎工作正常,但我希望当该级别被选中并且用户按下start时,该级别的字符串会进入屏幕。
我的问题:如何将字符串从LevelSelect传递给GamePlay?
感谢您提供的任何帮助!
答案 0 :(得分:1)
如果我正确理解您的问题,LevelSelect
和GamePlay
都是UIViewController
的子类。用户通过LevelSelect
视图控制器选择他想要播放的关卡。听起来您已经知道如何显示GamePlay
视图控制器的视图。您只是不知道在显示之前如何将字符串传递给该视图控制器。
当用户按下开始按钮时,我假设您当前正在构建并向您的GamePlay
视图控制器显示如下代码:
- (IBAction)startButtonPressed:(id)sender {
GamePlay *gamePlayViewController = [[[GamePlay alloc] initWithNibName:nil bundle:nil] autorelease];
[self presentModalViewController:gamePlayViewController animated:NO];
}
您的目标是为GamePlay
视图控制器提供一个levelString
属性,您可以这样设置:
- (IBAction)startButtonPressed:(id)sender {
GamePlay *gamePlayViewController = [[[GamePlay alloc] initWithNibName:nil bundle:nil] autorelease];
gamePlay.levelString = self.selectedLevelString;
[self presentModalViewController:gamePlayViewController animated:NO];
}
其中self.selectedLevelString
是用户在选择器中选择的级别的字符串。
要实现这一点,您需要在GamePlay.h文件中声明属性,如下所示:
@interface GamePlay : UIViewController {
}
@property (nonatomic, retain) NSString *levelString;
@end
在你的GamePlay.m文件中,你需要合成这个属性并在你的dealloc方法中释放它,如下所示:
@implementation GamePlay
@synthesize levelString;
- (void)dealloc {
self.levelString = nil;
[super dealloc];
}
@end
这为您的GamePlay控制器提供了levelString
属性,您可以从LevelSelect
视图控制器设置该属性,如上所示。然后在GamePlay
视图控制器的任何方法中,您都可以使用self.levelString
访问此字符串。
顺便说一句,我上面的startButtonPressed:
示例代码假定您的LevelSelect
视图控制器上有一个名为selectedLevelString
的属性。您可以声明此属性的方式与我们在levelString
上声明GamePlay
属性的方式完全相同。当用户选择pickerView:didSelectRow:inComponent:
中的级别时,您可以根据需要设置此字符串。