以编程方式加载新的 ViewController

Posted

技术标签:

【中文标题】以编程方式加载新的 ViewController【英文标题】:Loading a new ViewController programmatically 【发布时间】:2014-05-18 10:56:00 【问题描述】:

用户打开应用程序并显示 LoginViewController,一旦他们输入他们的详细信息并按下登录按钮,就会发出 NSURLRequest,如果结果成功,则应用程序需要加载 HomeViewController。

除了加载 HomeViewController 之外,一切正常。

我已经尝试实例化 HomeViewController 并且:

[self presentViewController:Home animated:YES completion:NULL]

但它不会加载新的控制器,我不确定我是否需要继续或执行一些我不知道的其他类型的模态请求。

【问题讨论】:

你在使用故事板吗?请在您创建家庭控制器的地方发布代码。 我正在使用情节提要,所有的控制器都是这样创建的,我尝试 ctrl+drag 从 Login 到 Home,设置为模态 segue,添加一个 id,用 [self performSegueWithIdentifier:@" 调用它MySegueName" 发件人:发件人];但也没有任何反应...... 【参考方案1】:

我假设HomeHomeViewController 的类? 当它的名字wasHomeViewController 时,它会更像可可风格。

self.homeViewController = [[Home alloc]init];

这样做,您必须注意创建和布局控制器控制的所有视图。如果您使用 Interface Builder 执行此操作,请使用

self.homeViewController = [[Home alloc] initWithXib:@"NameOfTheNibFileHere"]];

如果您的视图控制器布局在情节提要中,则在此示例中给它一个 ID“HomeID”)在情节提要中并通过加载它。

self.homeViewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeID"];

如果它是你故事板的根视图控制器,那么我建议使用

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

然后从那里出发。

【讨论】:

【参考方案2】:

您可以使用 segue 执行此操作,但您不想从登录按钮触发 segue - 您需要以编程方式执行此操作。在 Image Builder 中,转到登录视图的底部并按住 Control 键单击黑条中的黄色 View Controller 图标并拖动到您的HomeViewController。选择“替换”作为转场类型,然后照常给转场一个标识符(比如“HomeSegue”)。

现在,一旦您的登录完成,您就可以使用

触发 segue
[self performSegueWithIdentifier:@"HomeSegue" sender:self];

如果登录失败,那么您可以留在登录视图控制器上并根据需要显示错误

【讨论】:

以上是关于以编程方式加载新的 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 以编程方式从可表示返回到视图

如何以编程方式创建新的 cron 作业?

如何以编程方式创建新的 cron 作业?

检查是不是有新的 Windows 版本可用并以编程方式安装

以编程方式创建一个新的 Xtext 项目 [关闭]

格式化新的 TableRow(以编程方式)