【问题标题】:Conditionally Switching a UIViewController有条件地切换 UIViewController
【发布时间】:2014-02-15 20:25:39
【问题描述】:

对于我的应用,我需要用户输入一个数字,因此为了防止他们不输入数字,我创建了一个 if/else 语句,如果用户不填写,则会向他们显示错误消息字段,如果他们填写了数字,则移动到应用程序的主视图。唯一的问题是,每当它尝试运行代码以调出下一个屏幕时,我都会崩溃。

- (IBAction)budgetButton:(id)sender
{
    myBudget = [self.budgetTextField.text floatValue];
    NSLog(@"myBudget = %.2f", myBudget);
    if (myBudget == 0)
    {
        self.whatsYourBudgetLabel.text = [NSString stringWithFormat:(@"You must enter a budget!")];
    }
    else
    {
        ViewController * nextView = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
        self.view.window.rootViewController = nextView;
    }
}

【问题讨论】:

  • 这有点不连贯。 “我需要用户输入一个数字,所以为了防止这种情况发生”你试图阻止你需要发生的事情?请您编辑以更清楚地解释您的问题吗?如果您的应用程序崩溃,请包含任何错误消息。
  • 尝试用[self presentViewController:nextView animated:NO completion:nil];替换self.view.window.rootViewController = nextView;

标签: ios objective-c uiviewcontroller


【解决方案1】:

您移动到下一个视图的代码搞砸了。 看看performSegueWithIdentifier:sender: 方法。

您不应更改窗口的根目录。将 UINavigationController 放入您的窗口,将您的整个视图层次结构放入其中,并使用默认的 segue 机制进行导航。

【讨论】:

  • 试一试,它仍然会因 SIGABRT 而崩溃。 [self performSegueWithIdentifier:@"View Controller" sender:self];
  • 你的segue的标识符真的是“视图控制器”吗?
  • 我是编程新手,我才刚学几个月。当我试图学习东西时,我不需要这些令人沮丧的、刻薄的 cmets。
  • 这既不令人沮丧也不刻薄。在您的开篇文章中,标识符的名称是“ViewController”。在您的评论中,它是“视图控制器”。我只是想知道你是否在某个地方打错了。我知道一个是给 segue 的,一个是给 VC 的,但仍然值得确保你没有在某个地方混淆这两个。
猜你喜欢
  • 2018-12-15
  • 2014-10-26
  • 2018-01-06
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 2020-08-31
相关资源
最近更新 更多