Iphone 如何创建一个UIViewController,其中包含两个视图,根据单击的按钮显示一个或另一个视图
我对iOS开发还很陌生,我被卡住了。目前,我使用一个选项卡控制器在两个视图控制器(列表和地图视图)之间切换。这使得使用故事板来配置两个视图的外观变得更容易 现在,要求已经改变,应用程序需要一个视图控制器,带有分段控件,单击该控件可以显示列表或地图视图。为了做到这一点,我需要制作一个能够显示列表/地图视图的视图控制器 我理解分段控制器部分是如何工作的,但我只是停留在如何让两个视图在同一区域中显示一个或另一个。 我如何在一个视图控制器中拥有两个视图(如果可能,使用情节提要)Iphone 如何创建一个UIViewController,其中包含两个视图,根据单击的按钮显示一个或另一个视图,iphone,objective-c,Iphone,Objective C,我对iOS开发还很陌生,我被卡住了。目前,我使用一个选项卡控制器在两个视图控制器(列表和地图视图)之间切换。这使得使用故事板来配置两个视图的外观变得更容易 现在,要求已经改变,应用程序需要一个视图控制器,带有分段控件,单击该控件可以显示列表或地图视图。为了做到这一点,我需要制作一个能够显示列表/地图视图的视图控制器 我理解分段控制器部分是如何工作的,但我只是停留在如何让两个视图在同一区域中显示一个或另一个。 我如何在一个视图控制器中拥有两个视图(如果可能,使用情节提要) 提前谢谢 一个视图控制器
提前谢谢 一个视图控制器中不应该有两个主视图,而是需要为每个要显示的视图创建一个视图控制器。但是,您当然可以在单个视图控制器中拥有多个子视图,这可能正是适合您的 有许多方法可以解决这个问题,正确的方法是创建一个容器UIViewController,并将要显示的两个ViewController添加为其子对象,它们只需将视图设置为要显示的视图控制器,但这可能过于复杂了,因为您提到您是iOS开发的新手 因此,一个简单的解决方案(不确定是否可以在故事板中实现这一点-因为我不喜欢它),就是使用一个带有选项卡的视图控制器和主视图的两个子视图,然后您可以通过执行以下操作在视图之间切换:
[self.view addSubview:view1];
//转换
[view1 removeFromSuperview];
[self.view addSubView:view2];
或者,您实际上不需要将其从superview中删除,只需将其隐藏,然后使用将SubViewToFront
显示所需的视图
如果您想使用另一种方法,我建议您观看这段视频,即名为“实现UIViewController包容”的WWDC 2011视频。另一个问题应该有助于:
希望对您有所帮助。使用故事板api,您可以在2个ViewController之间切换
- (void)viewDidLoad {
[super viewDidLoad];
UIViewController *viewController = [self viewControllerForSegmentIndex:self.typeSegmentedControl.selectedSegmentIndex];
[self addChildViewController:viewController];
viewController.view.frame = self.contentView.bounds;
[self.contentView addSubview:viewController.view];
self.currentViewController = viewController;
}
- (UIViewController *)viewControllerForSegmentIndex:(NSInteger)index {
UIViewController *viewController;
switch (index) {
case 0:
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
break;
case 1:
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
break;
}
return viewController;
}
- (IBAction)segmentChanged:(UISegmentedControl *)sender {
UIViewController *viewController = [self viewControllerForSegmentIndex:sender.selectedSegmentIndex];
[self addChildViewController:viewController];
[self transitionFromViewController:self.currentViewController toViewController:viewController duration:0.0 options:UIViewAnimationOptionTransitionNone animations:^{
[self.currentViewController.view removeFromSuperview];
viewController.view.frame = self.contentView.bounds;
[self.contentView addSubview:viewController.view];
} completion:^(BOOL finished) {
[viewController didMoveToParentViewController:self];
[self.currentViewController removeFromParentViewController];
self.currentViewController = viewController ;
}];
self.navigationItem.title = viewController.title;
}
这是Raywenderlich提到的。希望这对故事板有所帮助,这样做是可能的
- (void)viewDidLoad {
[super viewDidLoad];
UIViewController *viewController = [self viewControllerForSegmentIndex:self.typeSegmentedControl.selectedSegmentIndex];
[self addChildViewController:viewController];
viewController.view.frame = self.contentView.bounds;
[self.contentView addSubview:viewController.view];
self.currentViewController = viewController;
}
- (UIViewController *)viewControllerForSegmentIndex:(NSInteger)index {
UIViewController *viewController;
switch (index) {
case 0:
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
break;
case 1:
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
break;
}
return viewController;
}
- (IBAction)segmentChanged:(UISegmentedControl *)sender {
UIViewController *viewController = [self viewControllerForSegmentIndex:sender.selectedSegmentIndex];
[self addChildViewController:viewController];
[self transitionFromViewController:self.currentViewController toViewController:viewController duration:0.0 options:UIViewAnimationOptionTransitionNone animations:^{
[self.currentViewController.view removeFromSuperview];
viewController.view.frame = self.contentView.bounds;
[self.contentView addSubview:viewController.view];
} completion:^(BOOL finished) {
[viewController didMoveToParentViewController:self];
[self.currentViewController removeFromParentViewController];
self.currentViewController = viewController ;
}];
self.navigationItem.title = viewController.title;
}
- (IBAction)switchView:(id)sender {
self.theTableView.hidden = !self.theTableView.hidden;
self.theMapView.hidden = !self.theMapView.hidden;
if (!self.theTableView.hidden) {
[self.theTableView reloadData];
}
}