有条件地切换 UIViewController

Posted

技术标签:

【中文标题】有条件地切换 UIViewController【英文标题】:Conditionally Switching a 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; 【参考方案1】:

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

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

【讨论】:

试一试,它仍然会因 SIGABRT 而崩溃。 [self performSegueWithIdentifier:@"View Controller" sender:self]; 你的segue的标识符真的是“视图控制器”吗? 我是编程新手,我才刚学几个月。当我试图学习东西时,我不需要这些令人沮丧的、刻薄的 cmets。 这既不令人沮丧也不刻薄。在您的开篇文章中,标识符的名称是“ViewController”。在您的评论中,它是“视图控制器”。我只是想知道你是否在某个地方打错了。我知道一个是给 segue 的,一个是给 VC 的,但仍然值得确保你没有在某个地方混淆这两个。

以上是关于有条件地切换 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

有条件地调用 useQuery 会导致构建失败

如何有条件地显示一个元素,保持其占用空间?

触发单击单选按钮可在切换前检查条件

有条件地渲染一个 <ui:include>

有条件地在 docker-compose 中挂载卷

Vue的条件渲染详解