使用导航控制器

时间:2016-11-15 19:12:38

标签: ios uinavigationcontroller

所以我想通过导航控制器循环使用不同的视图控制器,但同时我希望能够循环回任何视图,而无需推送新实例。

红色视图始终是初始视图,用户将在单击项目另一部分中的按钮后转到该视图。

例如:

B =蓝色。红色=红色G =绿色。

R> Y>乙

如果我回到红色视图我不想创建视图的新实例,我想要检索导航堆栈中的视图。

我已经可以使用

检索导航控制器中的视图
if let viewControllers = navigationController?.viewControllers {
    for viewController in viewControllers {
        if viewController is RedViewController {

          print("Already initialized")

        }
    }
}

现在我正在做

self.navigationController?.pushViewController(controller, animated: false)

但它总是创建该视图的新实例。

我的问题是:是否可以在导航视图控制器中显示已初始化的特定视图?

我无法拍出好照片,但想象红色视图嵌入在导航控制器中。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用setViewControllers()将堆栈的状态从一组视图控制器更改为另一组视图控制器。

let viewController = navigationController?.viewControllers
// remove unneeded view controllers from the stack
_ = navigationController?.setViewControllers(viewControllers, animated: true)

在您的示例中,当您获得堆栈数组时,它将包含R,Y和B,因此您可以删除Y和B以显示原始R视图控制器。

保持视图控制器永久加载的另一种方法是创建一个父视图控制器,它包含3个容器视图,一个在另一个之上。 (也许你需要阅读并试验容器视图,它是一个嵌入了视图控制器的视图)。每个容器视图都有一个嵌入其中的R,Y或B视图控制器。 您可以通过更改容器视图的alpha来在3个视图控制器之间切换。

即。为了显示R视图控制器,R容器的视图的α被设置为1.0,其中Y和B的容器视图' alpha设置为0.0