繁体   English   中英

将视图控制器用于子视图

[英]Using a View Controller for a subView

背景:

我有一个应用程序有一个标签栏作为其界面的一部分,但我没有使用标签栏控制器...我故意这样做有很多原因所以请不要回答我重写应用程序作为标签栏控制器,因为那不会有帮助。

视图控制器很好地控制了屏幕和标签等,但现在我想为应用程序添加一个完全不同的视图。 现在,是的,我可以将视图放在现有的.XIB中,然后将其所有控件放在现有的视图控制器类中,但它已经有很多工作,所以我想把这个视图绑定到它自己的视图控制器并按下按钮即可有效启动。

现在,在标签栏控制器模型中,添加一个绑定到选项卡的新视图控制器没有问题,但由于我没有使用标签栏控制器,我有点迷失。 我知道这是基本的,我只是没有看到它,但在XIB中没有办法将tabcontroller添加到tabbar或tabbar项目,sicne它不是tabbarcontroller IB似乎不允许这样。 我可以轻松地将视图添加到IB,但是我没有将控制器绑定到它并且需要该视图的所有控制代码也是主控制器的一部分,我可以做但我更愿意隔离,因为此视图与其他用户交互和视图相关的所有其他功能完全不同。

那么,实现这一目标的最佳方法是什么? 在选项卡栏上按实例化ViewController,并将其视图作为子视图添加到主窗口? 我认为这会起作用,但这似乎有点kludgy ..有没有其他方式来显示视图并将其绑定到一个视频控制器?

如果您使用iOS 5的视图控制器包含 ,则在viewDidLoad您将安装第一个视图控制器。 我通常在我的父控制器的NIB /故事板中定义一个childView视图,它将指示放置子视图的位置(如果你想为转换设置动画并希望将动画限制在子视图中,这是非常有用的):

OneViewController *controller = [[OneViewController  alloc] initWithNibName:@"OneViewController"  bundle:nil];

[self addChildViewController:controller];
[controller didMoveToParentViewController:self];
[childView addSubview:controller.view];

然后,当您单击(例如)第二个选项卡时,您想要转到下一个控制器,您只需调用transitionFromViewController

[self addChildViewController:newController];

[self transitionFromViewController:oldController 
                  toViewController:newController
                          duration:0.5
                           options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{
                            // do any other animation of the parent view that you want coordinated with the transition, e.g., I'm going to replace the nav bar title
                            [self updateTitles:newController];
                        }
                        completion:^(BOOL finished){
                            [oldController willMoveToParentViewController:nil];
                            [oldController removeFromParentViewController];
                            [newController didMoveToParentViewController:self];
                        }];

显然,完成所有这些工作后,您需要做很多工作才能重现标准的标签栏控制器功能,但我认为您有充分的理由这样做。

您在上一段中提出的建议大多数都适用。 :-) View Controllers实际上是为了管理“一屏内容”,所以如果你试试这个,请准备好卸载或重新加载视图,自动旋转和其他细微之处的怪癖。 在Apple的视图控制器编程指南中遵循这个建议可能是明智之举:

注意:如果要将视图层次结构划分为多个子区域并分别管理每个子区域,请使用通用控制器对象(从NSObject降序的自定义对象)而不是视图控制器对象来管理每个子区域。 然后使用单个视图控制器对象来管理通用控制器对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM