如何在同一个容器 Swift 内的笔尖视图之间切换?

问题描述

我有一个包含一些可重用元素的容器:imageView、label 和 stackView。

ngOnInit(): void {
    console.log(history.state.name);
}

我还有另外三个用 Nib 文件设计的视图控制器,我们称它们为 oneVC、twoVC 和 ThreeVC。这是他们的样子:

class ContainerViewController: UIViewController {

// MARK: - Constants

var stepList = [UIViewController]()

// MARK: - Outlets
@IBOutlet private(set) weak var logoImageview: UIImageView!
@IBOutlet private(set) weak var titleLabel: UILabel!
@IBOutlet private(set) weak var progressstackView: UIStackView!

. . .
}

每个控制器都有自己的 nextButton,并且有自己的 IBAction 在点击该按钮时触发。它应该推送到下一个 viewController,但这并没有发生。

当您访问容器时,oneVC 会显示在容器的可重用元素之间。这有效。

我不知道如何从我的 containerController 访问我的控制器的每个按钮。我需要实现这一点才能显示一个笔尖,而且它也必须能够返回。

我的 ContainerViewController 中的这段代码将每个控制器的视图添加为子视图:

class StepOneViewController: UIViewController {

// MARK: - Constants
. . .

@IBOutlet private(set) weak var nextButton: UIButton!

. . .
}

我还需要在每次点击任何 nextButton 并显示一个控制器时更改 progressstackView 的颜色。

解决方法

你的行为完全违法。你不能简单地说

view.addSubview(stepView)

突然就这样了。您实际上只是将笔尖用作垃圾箱潜水的一种形式;您正在抓取视图并将其推入您的界面,但视图控制器(例如 StepOneViewController)与您的视图控制器(ContainerViewController)没有正式关系。您正在使用“容器”,但这不是容器视图控制器。

为了让孩子(例如 StepOneViewController)进入视图控制器层次结构并使您的容器视图控制器成为 一个容器视图控制器——你不是在跳舞。

一旦您跳完舞,孩子就可以作为其 parent 与父母交谈。然后父母可以移除孩子(再次使用正式舞蹈)并用另一个替换。

另外,在你现在做的时候保留三个视图控制器是一个非常糟糕的主意。您一次只有一个可见的子视图,因此在任何给定时刻您只需要一个子视图控制器。