将视图控制器用于子视图

时间:2012-07-23 19:30:57

标签: ios tabbar viewcontroller

背景:

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

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

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

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

2 个答案:

答案 0 :(得分:3)

如果您使用iOS 5的view controller containment,则在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];
                        }];

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

答案 1 :(得分:0)

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

  

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