我有一个UIStackView
,我正在动态添加包含的UIViewControllers
,这是我的代码;
[self addChildViewController:driverForm];
[self addChildViewController:marketingView];
[self.stackView insertArrangedSubview:driverForm.view atIndex:0];
[self.stackView insertArrangedSubview:marketingView.view atIndex:1];
[driverForm didMoveToParentViewController:self];
[marketingView didMoveToParentViewController:self];
看完文件后,它说我必须打电话给didMoveToParentViewController
。
我面临的问题是,最后一个UIViewController
上的操作没有被调用,但第一个ViewController调用了。如果我交换这些,第一个有效,最后一个无效。
只需将ViewController的视图添加到UIStackView中,如下所示:
yourStackView.addArrangedSubview(yourViewController.view)
此外,您不必担心视图为零,因为它总是返回UIView!
请注意,顺序颠倒,因此最后一个显示在第一个。为了解决这个问题,假设您有一个视图控制器阵列,您可以使用stride
反向遍历阵列,并将视图控制器添加到堆栈中。
以下是Swift 5:的快速复制/意大利面版本
private var childViewController: UIViewController
private var stackView: UIStackView?
// MARK: - UIViewController
override func loadView() {
super.loadView()
// 1. Add the child view controller to the parent.
addChild(childViewController)
// 2 Create and add the stack view containing child view controller's view.
stackView = UIStackView(arrangedSubviews: [childViewController.view])
stackView!.axis = .vertical
self.view.addSubview(stackView!)
// 3. Let the child know that it's been added!
childViewController.didMove(toParent: self)
}
UIStackView用于在同一UIViewController类中排列多个子视图。如何将其用于不同的UIViewController?
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/#//apple_ref/doc/uid/TP40015256-CH1-SW31