在呈现视图之前即时segue

时间:2017-08-21 13:03:13

标签: swift segue

我正在尝试为我的项目找出正确的viewcontroller / segue结构,我需要一些帮助。

如果“ B ”将来自“ A ”,则会检查语句是否为真。只有在为真时,才会立即显示“ C ”而不是“ B ”。用户继续“ D ”,并且从“ D ”开始,应该有一个展开的segue回到“ B ”。

Segue Example

我可以检查'{strong> B '的viewDidAppear()中的if语句,但是在加载viewcontroller' C ”。它看起来不太好。

如果我尝试在viewDidLoad()中创建if语句,我会收到错误:

尝试在视图不在窗口层次结构中的“ B ”上显示“ C

也许还有更好的方法可以解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果没有实际显示您所转移的每个ViewController,则无法使用segues。仅在实际呈现ViewController之后调用Segues,例如,您不能从viewDidLoad中删除。

跳过具有segues的ViewController的唯一选择是,如果你设置了两个不同的segue,一个是你的“完整路径”,比如A->B->C,另一个是你跳过BA->C。因此,您需要从CA获得B的segue。

当然使用这种方法你不能将unwind segue用于根本没有呈现的ViewController。您可以通过不使用展开segues来解决此问题,但也可以通过“向后”设置segues来解决此问题。我的意思是“向后”是你设置一个segue说D->B,然后即使你的segue的顺序是B,你也可以“回”到A->C->D->B

答案 1 :(得分:0)

我想我终于找到了一个非常简洁的解决方案。我添加了另一个viewcontroller,它包含两个容器视图 - 一个嵌入' B ',另一个包含' C '。应该显示哪个容器由这两个简单的函数管理:

func switchToB() {
    containerB.isHidden = false
    containerC.isHidden = true
}

func switchToC() {
    containerB.isHidden = true
    containerC.isHidden = false
}

我让' D '展开到新的viewcontroller,然后触发switchToC()