设置UIScrollView以在3个视图控制器之间滑动

use*_*282 14 xcode objective-c uiscrollview ios swift

我正在尝试设置UIScrollView,以便我可以在我的3个视图控制器之间滑动.这是我在AppDelegate.m中的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.;

UIScrollView *sv = [[UIScrollView alloc] init];

BarsViewController *bvc = [[BarsViewController alloc] init]; // Create BarsViewController
StopwatchViewController *svc = [[StopwatchViewController alloc] init]; // Create StopwatchViewController
TimerViewController *tvc = [[TimerViewController alloc] init]; // Create TimerViewController

[sv addSubview:bvc.view];
[sv addSubview:svc.view];
[sv addSubview:tvc.view];

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; // Hide status bar

self.window.rootViewController = sv;
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)

它在这一行上出错:

self.window.rootViewController = sv;
Run Code Online (Sandbox Code Playgroud)

说,"不兼容的指针类型从UIScrollView*'分配给'UIViewController*'".

但是,没有UIScrollViewController这样的东西,所以我不知道该怎么做.

基本上,我只想让整个屏幕成为一个滚动视图,它允许我在我的3个视图控制器之间滑动.我该怎么做呢?

Nei*_*rov 39

UPD:2015年6月 Swift

概念保持不变,这将在下面的Objective-C部分中描述.语法有一点变化.要添加childviewcontroller,请使用以下代码段:

let aViewController = storyboard.instantiateViewControllerWithIdentifier("A") as! AViewController;

addChildViewController(aViewController);
scrollView!.addSubview(aViewController.view)
aViewController.didMoveToParentViewController(self)
Run Code Online (Sandbox Code Playgroud)

检查我的Swift Github示例代码

Objective-C的

创建自己的自定义容器视图控制器(我将其称为combinedViewController),它将在滚动视图中保存您的三个控制器.继承像你总是做UIViewController,然后在你的新combineViewController中使用addChildViewController公共API,-viewDidLoad:如下所示:

[self addChildViewController:aViewController];
[self.scrollView addSubview:aViewController.view];
[aViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

这是代码的作用:

  • 它调用容器的addChildViewController:方法来添加子进程.
  • 它访问子视图属性以检索视图并将其添加到其自己的视图层次结构中.容器在添加视图之前设置子项的大小和位置; 容器总是选择孩子的内容出现的位置.
  • 它显式调用子的didMoveToParentViewController:方法来表示操作已完成.

对每个viewControllers执行此操作.然后,将combinedViewController设置为rootViewController.

如果您需要进一步解释,请随时提出.

参考:设计自定义容器视图控制器

在这里,您是我的Objective-C Github示例代码

UPD:感谢@Oliver Atkinson澄清该addChildViewController:方法也会willMoveToParentViewController:自动调用子方法.

结果:

在此输入图像描述

  • 这有效!非常感谢你所做的一切努力!你太棒了!!! (2认同)
  • 感谢您制作github示例代码 - 非常有帮助! (2认同)