Xcode如何在场景之间切换

时间:2013-06-20 13:21:47

标签: objective-c uiviewcontroller

我是Objective-C开发的新手,正在寻找一种从编程方式改变场景的方法。 我搜索了很多,但我一直在收到错误。 谁能告诉我我做错了什么? 任何帮助将非常感激。 到目前为止我的代码:

- (IBAction)retryOrNextLevel:(id)sender {
    if (retryInteger == 1){
        [self viewDidLoad];
    }
    if (retryInteger == 2){
    Level2 *secondLevel = [[Level2 alloc] initWithNibName:@"Level2" bundle:nil];
    [secondLevel setTitle:@"Level2"];
    secondLevel.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentViewController:secondLevel animated:NO completion:Nil];
    }
}

retryInteger是一个整数,如果你的关卡失败则设置为1,如果你已经完成游戏关卡则设置为2。我使用相同的按钮来完成两件事:如果你失败了关卡,你可以重放关卡,当你完成关卡后,你可以进入下一关。 Level2是一个UIViewController。 提前致谢! MATIS

2 个答案:

答案 0 :(得分:1)

首先,你永远不应该打电话给[self viewDidLoad];当你猜到viewDidLoad时会自动调用它。

第二个是什么是retryInteger?我将假设这个答案,如果用户已经点击了这个按钮,或者做了某些事情,那么你已经设置了一些价值。

让我们看看我们可以用你的代码做什么:

- (IBAction)retryOrNextLevel:(id)sender {
    if (retryInteger == 1){
        [self callSomeMethodThatIsntVIEWDIDLOAD];
    }
    if (retryInteger == 2){
        Level2 *secondLevel = [[Level2 alloc] initWithNibName:@"Level2" bundle:nil];
        [secondLevel setTitle:@"Level2"];
        // Pushing onto a navigationController would seem more logical (Would recommend)
      //  [self.navigationController pushViewController:secondLevel animated:YES]; 
        // Otherwise you want this
          [self presentViewController:secondLevel animated:YES completion:nil];
    }
}

在这个答案中有几个假设,直到你更新你的问题,这个答案是基于假设。 Level2的第一个是UIViewController?你得到了什么错误?由于你的原始代码应该呈现视图控制器所以我假设当它试图呈现它时你在Level2控制器中做了一些破坏它的事情,导致Level2控制器中出现问题然后它会显示在这一行[self presentViewController:secondLevel animated:NO completion:Nil];我也会这样做,所以它是动画的,好像你说不,它使modalTransitionStyle毫无意义。

如果你更新你的问题,我会尝试改进这个答案,但在你做之前我没有其他的事情可做。如果你的应用程序在崩溃时退出,那么使用在抛出异常时停止的Exception Breakpoint

修改

你没有打电话给[self retryOrNextLevel]你想要调用[self retryOrNextLevel:myButton]你没有调用正确的方法。无论你在哪里调用它,都会丢失参数,因此你会遗漏:myButton。 你的方法是

- (IBAction)retryOrNextLevel:(id)sender;

而不是

- (IBAction)retryOrNextLevel; 

记下发件人参数。

要确保班级能够回复retryOrNextLevel

if([self respondsToSelector:@selector(retryOrNextLevel:)] {
    // Code for calling the method.
}

答案 1 :(得分:0)

我找到了答案!错误是因为我忘了声明某些东西,当我触摸按钮时没有发生任何事情的原因是因为我没有在视图控制器之间拖动一个segue。该视频回答了我的问题:http://www.youtube.com/watch?v=XApYtAlRDVE