gpt4 book ai didi

iphone - presentViewController 和 pushViewController 之间的不同结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:42:04 30 4
gpt4 key购买 nike

我对在以编程方式实例化和打开新 View 的两次尝试之间看到的不同结果感到有些困惑。我有一个由 NSTimer 回调调用的方法(虽然我认为这不是那么相关),它尝试分配和初始化第二个 View Controller ,并将它压入堆栈(我可能有一点我的命名法离开那里,抱歉)。

查看 ViewController 编程指南和此处的一些答案,我确定了两个可能的解决方案,这两个解决方案都可以正常构建和运行,但我得到不同的结果,它们都不能完全工作。

第一个使用presentViewController 方法。它看起来像这样:

SecondViewController *secondView = [[SecondViewController alloc] init];
[self presentViewController:secondView animated:YES completion:NULL];

... 从某种意义上说,它是有效的。我在 SecondViewController 类的 viewDidLoad 方法中放置了一个 NSLog,它会打印出来。如果我还在那里以编程方式设置 UIColor,屏幕颜色。但是,我在 Storyboard 中放置在该 VC View 上的任何内容都不会显示 - 如果我不以编程方式为 View 着色,则屏幕为黑色。

我尝试的第二种方法是因为我认为代码没有正确连接到我的 Storyboard(这是一种仍然适用于 XIB 的 afaik 的旧方法)。它看起来像这样:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
SecondViewController *secondView = (SecondViewController *)
[storyboard instantiateViewControllerWithIdentifier:@"secondView"];
[self.navigationController pushViewController:secondView animated:YES];

...但是 viewDidLoad 和界面似乎都没有响应/被调用。

我还查看了 prepareForSegue 方法,但我不确定它是否会有所作为,因为我很确定我遗漏了什么...

我应该注意,我已经在 Identity Inspector 下设置了 ViewController 的 Storyboard ID。

如果有人能解释我的问题的直接解决方案和/或对我遇到的问题的更详细解释,我们将不胜感激。

~杰西

最佳答案

使用 presentViewController 的第一个解决方案/问题,创建和演示很好,但 Storyboard根本不涉及。如果您在代码中创建 View 内容(如颜色),或者如果 init 方法加载了一个 NIB 或其他东西,一切都会很棒。

第二种方法看起来应该可行,所以可能是 Storyboard的名称错误,标识符的名称错误,或者 navigationController 为 nil。

prepareForSegue 方法只会在 segue 由用户交互触发时调用,其中 segue 是在 Storyboard中配置的,或者是专门从代码触发的 segue。

通常,您希望主要使用一种形式来创建 View 过渡。如果您使用的是 Storyboard ,那么通常是在 Storyboard 中配置并链接到 UI 项目的转场。然后,您将在“源” View Controller 中实现 prepareForSegue 以传递“目标” View Controller 所需的任何附加信息。你应该完成 this guide .

关于iphone - presentViewController 和 pushViewController 之间的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637126/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com