我遇到了iOS中典型的容器视图问题。我有一个带有两个子视图的ViewController:一个UISegmentedControl和一个容器视图。现在,将我的容器视图放置在情节提要中后,我不确定如何继续。自然地,我认为下一步是将UIContainerView子类化,以完成我在iOS文档中阅读的所有内容。但是没有像UIContainerView这样的类。因此,现在,除了我能够放置在情节提要中的东西之外,我还是被困住了。希望有人能帮助我,我将提出一个简单的方案。
想像:
因此,在这一点上,我该如何进行?由于无法将此类归类为UIContainerView,因此该怎么办?
我相信这种情况足够简单,有人可以提供示例,但是如果您认为它太复杂了,请提供一个示例来简化这种情况。我只想看看如何完成一个简单的任务。
附言我已经在StackOverflow上进行过浏览,例如:
Swapping child views in a container view
而且我已经阅读了https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html#//apple_ref/doc/uid/TP40007457-CH18-SW6上的文档
最佳答案
我认为最好使用UISegmentedControl而不是两个UIButton。
容器视图子视图(_vwContainer.subviews
)最初包含CatViewController的视图,该视图会自动实例化。
// ViewController.m
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *vwContainer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_vwContainer.clipsToBounds = YES;
}
- (IBAction)onSegmentValueChanged:(UISegmentedControl *)sender {
NSLog(@"Value changed to: %zd",sender.selectedSegmentIndex);
NSLog(@"BEFORE: self.childViewControllers: %@",self.childViewControllers);
NSLog(@"BEFORE: _vwContainer.subviews: %@",_vwContainer.subviews);
// set oldVC & newVC
UIViewController *oldVC = self.childViewControllers.firstObject;
NSString *strIdNewVC;
switch (sender.selectedSegmentIndex) {
case 0: strIdNewVC = @"catVC"; break;
default: strIdNewVC = @"dogVC";
}
UIViewController *newVC = [self.storyboard instantiateViewControllerWithIdentifier:strIdNewVC];
//
[oldVC willMoveToParentViewController:nil];
[self addChildViewController:newVC];
// Prepare animation transition, for example left to right
newVC.view.frame = oldVC.view.frame;
CGPoint pntEnd = oldVC.view.center;
CGPoint pntInit = pntEnd;
pntInit.x += oldVC.view.frame.size.width;
newVC.view.center = pntInit;
[self transitionFromViewController:oldVC toViewController:newVC
duration:0.25 options:0
animations:^{
newVC.view.center = pntEnd;
} completion:^(BOOL finished) {
[oldVC removeFromParentViewController];
[newVC didMoveToParentViewController:self];
NSLog(@"AFTER: self.childViewControllers: %@",self.childViewControllers);
NSLog(@"AFTER: _vwContainer.subviews: %@",_vwContainer.subviews);
}];
}
@end