只是为了学习 xCode 的某些特定方面,我正在创建一个具有 2 个功能视图控制器的简单应用程序。每个都包含一个按钮,可以按下该按钮切换到另一个。我没有使用segues。我正在使用从应用程序委托中检索到的指针。
当应用程序加载时,根视图控制器呈现视图 1。当您单击“切换到视图 2”时,以下代码会导致视图 2 出现:
- (IBAction)buttonPressed:(id)sender
{
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[self presentViewController:appDelegate.view2 animated:YES completion:nil];
}
到目前为止,一切都很好。
但是,当您在第二个视图上单击“切换到视图 1”时,同样的代码(将“view2”替换为“view1”)会出现以下错误:
应用程序试图以模态方式呈现活动控制器。
总结一下(其中 --> = 表示),我们有 root --> view1 --> view2 -x-> view1
我不在乎保留谁呈现谁的历史。我只是想让按钮将之前显示的视图控制器带到顶部(使其可见),保持其视图的状态。
很高兴知道以下内容:
是否有一种解决方法可以让我使用 presentViewController 实现预期的行为?例如,根 --> view2 --> view1
对于实现所需行为,还有哪些其他方法更实用?它/他们必须使用应用程序委托,因为在我的实际应用程序中这是不可避免的。
我是否通过尝试将视图控制器放在顶部而不集成到更大的架构中来打破规则?例如,这种行为是否应该由导航控制器和推送/弹出来处理?如果是这样,你能解释为什么 xCode 不希望我这样做吗?为什么我不能只显示我想要的任何视图控制器,而不一定与其他视图控制器有任何关系?(也许是因为这可能导致滥用应用程序委托?)
“呈现”视图控制器的真正含义是什么?除了在演示者和演示者之间创建指针之外,它还需要哪些功能限制或功能?让呈现视图控制器“活动”有什么重要性?
如果改为让 view1 上的按钮将
presentViewController
消息发送到根视图(我希望只是将表示链从 root --> view1 更改为 root --> view2,让 view1 仍然存在于内存中,但不是该链的一部分) ,我得到一个不同的错误:“尝试呈现其视图不在窗口层次结构中!” 这是什么意思?我找不到窗口层次结构的解释。
好的,我知道我在这里问了很多,但是任何启发都将不胜感激!