我需要一些帮助。我整天都被困在这个问题上,我无法找到解决办法。我将尝试尽可能清楚地解决我的问题。
我有2个ViewControllers。一个叫做ViewController,另一个叫做GameViewController。在ViewController中,我有我的主屏幕菜单,在GameViewController上我有Game屏幕和Game Over屏幕。当您从ViewController按下播放时,它会将您带到游戏中,然后当您死亡时,您将保持在相同的GameViewController中但在游戏结束视图中。如果您在Game Over屏幕中按重启,则segue会以模态方式将您带回游戏屏幕。
所以这就是我遇到的问题。
当你第一次去世并进入游戏结束屏幕时,你可以点击主页然后它将带你回家,但如果你按重启,然后再次死亡(那是两次)然后尝试从Game Over Screen它不会运行主页按钮内的代码。按钮实际上工作,我有一个NSLog,它显示在调试器屏幕中。我知道很奇怪。请参阅以下代码,该代码将显示我为尝试使其工作所做的一切。
在GameViewController.h中//最重要的是#imports
@class GameViewController;
@protocol GameViewControllerDelegate <NSObject>
-(void) GameViewControllerDidCancel:(GameViewController *)controller;
- (IBAction)homeBtn:(id)sender;
@end
这就在@Interface
中关闭之后@property (nonatomic, weak) id <GameViewControllerDelegate> delegate;
在@Implementation
之后的GameViewController.m中@synthesize delegate = _delegate;
这是在我的家里
- (IBAction)homeBtn:(id)sender {
NSLog(@"home btn pressed");
[self.delegate GameViewControllerDidCancel:self];
}
然后在我的ViewController.h中
#import "GameViewController.h"
@interface ViewController : UIViewController <GameViewControllerDelegate>
ViewController.m
当我按下播放时
- (IBAction)playButton:(id)sender {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPad"
bundle:nil];
GameViewController* controller= [sb instantiateViewControllerWithIdentifier:@"GML"];
controller.delegate = self;
[self presentViewController:controller animated:NO completion:nil];
[audioPlayer stop];
}else {
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPhone"
bundle:nil];
GameViewController* controller= [sb instantiateViewControllerWithIdentifier:@"GML"];
controller.delegate = self;
[self presentViewController:controller animated:NO completion:nil];
[audioPlayer stop];
}
}
我尝试从homeBtn调用的方法也在这里
#pragma mark - GameViewControllerDelegate
- (void) GameViewControllerDidCancel:(GameViewController *)controller {
[self dismissViewControllerAnimated:NO completion:nil];
}
我很确定就是这样。就像我之前说的那样,重启按钮只是链接到一个segue以返回到Game屏幕。
请大家,我现在非常绝望,我完全没有想法。
谢谢
答案 0 :(得分:0)
相当复杂的视图层次结构,难以理解。
restartGameButton
究竟做了什么。它是一个放松的segue?
当您从ViewController按下播放时,它会将您带到游戏中,然后当您死亡时,您将保持在相同的GameViewController中但在游戏结束视图中。如果您在Game Over屏幕中按重启,则segue会以模态方式将您带回游戏屏幕。
GameOver view
是什么东西?一旦你在GameViewController
中说出了一个视图,但是你再次说你是否按下了重启,一个segue会以模态方式返回游戏画面(即GameViewController
),这意味着GameOver画面也是{ {1}}。
为什么在它实际上是你想要的导航堆栈时使用模态演示?
我认为最佳解决方案:
制作3个ViewControllers,一个用于开始,一个用于游戏,一个用于GameOver。将ViewControllers嵌入导航控制器中并使用此控制器进行推送和弹出,而不是将多个模态视图相互叠加。