问题描述
我有一个包含一些可重用元素的容器: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
与父母交谈。然后父母可以移除孩子(再次使用正式舞蹈)并用另一个替换。
另外,在你现在做的时候保留三个视图控制器是一个非常糟糕的主意。您一次只有一个可见的子视图,因此在任何给定时刻您只需要一个子视图控制器。