2013-03-31 79 views
0

我正在为iPhone的词搜索益智游戏,我试图实现应用程序的重新启动按钮。重启按钮应该能够初始化一个新的视图控制器,产生一个新的难题,并显示新的难题。现在,在益智游戏视图中,我有一个按钮,点击它可以打开暂停菜单视图,使用模式轮播(暂停菜单有三个按钮,恢复,重新启动,主菜单)。然后让益智游戏控制器成为暂停菜单的代表,当按下按钮时它会接收到通知。简历和主菜单按钮有效,但我无法通过重新启动按钮重新加载视图。难题在一个容器视图内,它具有一个创建网格并显示字母的集合控制器。黑屏当试图刷新视图控制器

随着我现在的代码,当我点击重启按钮,我看到一个只显示导航栏的黑屏。但是,一旦我点击暂停菜单按钮(位于导航栏中),然后点击暂停菜单中的恢复按钮,我就会看到包含新生成的拼图的视图。

下面是在pauseMenuController代码:

- (IBAction)IBARestart:(id)sender { 
     [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
     [self.delegate goToRestart]; 
     } 

现在,这里是我puzzleGameController代码:

-(void)goToRestart{   
    self.view = nil; 
    [self.view.window setNeedsDisplay]; 

    PuzzleCollectionControllerViewController *puzzleInstance = [self.childViewControllers lastObject]; 
     puzzleInstance.view = nil; 
     [puzzleInstance.view setNeedsDisplay]; // I tried reloading the cointainer view too, but it still shows black screen 


    } 

任何人有任何想法,为什么它显示黑屏?由于提前

+0

而不是删除视图控制器的主视图,请尝试清除VC本身。然后用新的实例重新启动它。显示你的暂停和恢复按钮片段会有所帮助。 – user523234

回答

1

我不知道这是否是足够的代码,让你的问题..

但是我对这个担心是: 你为什么“无” self.view在重新启动?如果你这样做,视图是“无”,因此不会显示任何内容,puzzleInstance.view也是如此。

你可以在viewDidUnload中取消/释放内存,因为视图将在viewDidLoad上再次设置,但通常我只是“nil”/“dealloc”任何属性,插座等(在viewDidUnload或dealloc上,取决于在我设置/重新设置它们的位置),而不是视图本身。 “setNeedsDisplay”只会“重绘”视图,但如果它是零,恐怕没有什么可以重绘。所以我很确定这是你的问题。

什么是不同的,或当你按“简历”(代码?)时发生了什么。

+0

我试图使用ViewDidUnload解除分配内存,但该方法已弃用ios 6.原因,我最初做self.view“无”是因为我想强制,ViewDidLoad再次运行。我的大部分逻辑是在viewDidLoad中,但我唯一拥有的是计时器,我有这个难题。至于当我按简历时,我唯一在那里有一个方法,恢复计时器我有这个难题。 – RamonV

+0

如果您不使用ARC,则只需要dealloc。除非第一次在屏幕上显示视图,否则不能确定何时调用viewDid(Un)加载。 Ios可以在内存不足的情况下卸载视图(当它不在屏幕上时)并在视图返回到屏幕上时再次加载视图。但是您可以使用viewWillAppear,它将在视图出现之前每次调用。因此,只需创建一个方法“updateUI”,您可以在viewDidLoad和viewWillAppear中调用该方法。希望这会帮助你:-) – d4Rk

+0

是的,我试过了,它仍然没有工作。我需要实现一个类别视图来选择拼图主题词,所以我的解决方法是在goToRestart方法中使用[self.navigationController popViewControllerAnimated:true]。无论如何感谢您的帮助! – RamonV