1

背景:

我有一个应用程序,它的界面中有一个标签栏,但是我没有使用标签栏控制器......我出于多种原因故意这样做,所以请不要回答我将应用程序重写为标签栏控制器,因为那不会有帮助。

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

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

那么,实现这一目标的最佳方法是什么?实例化标签栏上的 ViewController 按下,并将其视图作为子视图添加到主窗口?我认为这会起作用,但这似乎有点笨拙。有没有其他方法可以显示视图并将其绑定到 veiw 控制器?

4

2 回答 2

3

如果您使用 iOS 5 的视图控制器容器viewDidLoad您将安装第一个视图控制器。我通常childView在我的父控制器的 NIB/storyboard 中定义一个视图,它将指示子视图的放置位置(如果您想要动画转换并将动画限制到子视图,这尤其有用):

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];
                        }];

显然,做这一切,你做了很多工作来重现标准的标签栏控制器功能,但我认为你有令人信服的理由这样做。

于 2012-07-23T23:20:20.333 回答
0

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

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

于 2012-07-23T20:14:42.283 回答