首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建一个包含两个视图的UIViewController,根据单击的按钮显示一个或另一个视图

如何创建一个包含两个视图的UIViewController,根据单击的按钮显示一个或另一个视图
EN

Stack Overflow用户
提问于 2012-08-28 01:35:05
回答 3查看 13.6K关注 0票数 7

我是iOS开发的新手,我被困住了。目前,我使用一个选项卡控制器在两个视图控制器(列表和映射视图)之间切换。这使得使用故事板来配置两个视图的外观变得更容易。

现在需求已经改变了,应用程序需要有一个带有分段控件的视图控制器,在单击时,显示列表或地图视图。为了做到这一点,我需要做一个可以显示列表/地图视图的视图控制器。

我知道分段控制器部分是如何工作的,但我只是被困在如何让两个视图显示在同一区域。如何在一个视图控制器中拥有两个视图(如果可能,使用故事板)?

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-28 01:43:53

您不应该在一个视图控制器中有两个主视图,相反,您需要为您想要显示的每个视图创建一个视图控制器。但是,您当然可以在单个视图控制器中拥有多个子视图,这可能适合您。

有许多方法可以解决这个问题,正确的方法是创建一个容器UIViewController,并添加你想要显示的两个视图控制器作为它的孩子,它们只是将视图设置为你想要显示的视图控制器,但这可能会过于复杂,因为你提到你是iOS开发的新手。

因此,一个简单的解决方案(不确定你是否可以在storyboard中实现它-因为我不喜欢它),可以有一个视图控制器,带有标签,以及主视图的两个子视图,然后你可以简单地在视图之间切换,如下所示:

代码语言:javascript
运行
复制
[self.view addSubview:view1];

//切换

代码语言:javascript
运行
复制
[view1 removeFromSuperview];
[self.view addSubView:view2];

或者,您不需要将其从superview中删除,只需将其隐藏,然后使用bringSubViewToFront显示所需的视图。

如果你想使用另一种方法,我建议你看看这个视频,名为"Implementing UIViewController Containment“的WWDC2011视频。另一个问题应该对:UISegmented control with 2 views有用

希望这能有所帮助。

票数 10
EN

Stack Overflow用户

发布于 2012-08-28 01:51:14

使用storyboard api,您可以在2个viewControllers之间切换

代码语言:javascript
运行
复制
 - (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的iOS tutorial。希望这能有所帮助

票数 4
EN

Stack Overflow用户

发布于 2013-06-16 16:22:00

有了Storyboard,就可以这样做了。

  1. 创建添加了UISegmentControl和UITableView+UITableViewCell的UIViewController。

  1. 现在您还想添加MKMapView,如果您只是尝试将MapView放在ViewController上,它将被添加为新的TableView单元格,这不是我们想要的。

这就是为什么你不应该这么做的原因。相反,必须将MapView添加到Storyboard的ViewControllers列表中

  1. 将MapView的大小和原点调整为与TableView的大小和原点相同。

  1. 现在,setHidden同意任一TableView of MapView,为他们创建和合成门店。然后在段控制值更改的方法中实现switching:
  • (IBAction)switchView:(id)sender { self.theTableView.hidden = !self.theTableView.hidden;self.theMapView.hidden = !self.theMapView.hidden;if (!self.theTableView.hidden) { self.theTableView reloadData;} }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12146722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档