Contrainer View storyboard 能拖出來的控件,繼承UIView,當又與UIStackView 不一樣,很奇葩的東西。
注1:可以直接拖入某個ViewController,并且可以多個!每一個對應連接了一個VC,相當于add childViewController了!
注2:鏈接有segue,但是不能直接用會崩潰,也不知道該怎么用才好。
注3:現在只能遍歷自身的childViewControllers,然后去切換,感覺并沒有純代碼方便啊,阿西吧。
// 找到對應的 childViewController(總覺得哪里不對!!!!)
- (void)checkChildViewController {
[self.childViewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[AViewController class]]) {
self.avc = obj;
}
else if ([obj isKindOfClass:[BViewController class]]) {
self.bvc = obj;
}
else if ([obj isKindOfClass:[CViewController class]]) {
self.cvc = obj;
self.currendViewController = obj;// 最后一個拖進去的 container View 是當前的
}
else {
// if more vc
}
}];
}
// 切換
- (void)transitionToViewController:(UIViewController *)destinationViewController {
if (destinationViewController == self.currendViewController) {
return;
}
[self transitionFromViewController:self.currendViewController toViewController:destinationViewController duration:CGFLOAT_MIN options:UIViewAnimationOptionCurveEaseOut animations:^{
} completion:^(BOOL finished) {
self.currendViewController = destinationViewController;
}];
}
順便貼個純代碼的
self.viewControllers = @[self.detailViewController,
self.performanceViewController,
self.relatedDocumentViewController,
self.similarProductViewController,
self.productAboutViewController];
- (void)addChildViewControllers {
int temp = 0;
for (UIViewController *viewController in self.viewControllers) {
[self addChildViewController:viewController];
[viewController didMoveToParentViewController:self];
viewController.view.frame = self.contentView.bounds;
if (temp == 0) {
[self.contentView addSubview:viewController.view];
self.currentViewController = viewController;
}
temp ++;
}
}
- (void)transitionViewControlleToIndex:(NSInteger)index {
if (index >= self.viewControllers.count) {
return ;
}
UIViewController *transitionedController = self.viewControllers[index];
if (transitionedController != self.currentViewController) {
[self transitionFromViewController:self.currentViewController
toViewController:transitionedController
duration:CGFLOAT_MIN
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
//
} completion:^(BOOL finished) {
self.currentViewController = transitionedController;
}];
}
}
1