设置UIScrollView以在3个视图控制器之间滑动 [英] Setting up UIScrollView to swipe between 3 view controllers

查看:143
本文介绍了设置UIScrollView以在3个视图控制器之间滑动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

   - (BOOL)应用程序:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *) launchOptions 
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//在应用程序启动后覆盖自定义点。

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

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

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

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; //隐藏状态栏

self.window.rootViewController = sv;
[self.window makeKeyAndVisible];
返回YES;
}

此行显示错误:

  self.window.rootViewController = sv; 

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



然而,没有UIScrollViewController这样的东西,所以我不知道该怎么办。



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

解决方案

UPD:2015年6月
Swift



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

 将aViewController = storyboard.instantiateViewControllerWithIdentifier(A)设为! AViewController; 

addChildViewController(aViewController);
scrollView!.addSubview(aViewController.view)
aViewController.didMoveToParentViewController(self)

检查我的


I am trying to set up a UIScrollView so that I can swipe between my 3 view controllers. This is my code in 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;
}

It gives an error on this line:

self.window.rootViewController = sv;

saying, "Incompatible pointer types assigning to 'UIViewController *' from UIScrollView *'".

However, there is no such thing as a UIScrollViewController, so I don't know what to do.

Basically, I just want the whole screen to be a scroll view which allows me to swipe between my 3 view controllers. How would I go about doing that?

解决方案

UPD: June, 2015 Swift

The concept remains the same, which is described below in Objective-C section. There is a little change in syntax. To add childviewcontroller use following snippet:

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

addChildViewController(aViewController);
scrollView!.addSubview(aViewController.view)
aViewController.didMoveToParentViewController(self)

Check my Swift Github Sample Code

Objective-C

Create your own custom container view controller (I will call it combinedViewController), which will hold your three controllers in scroll view. Inherit like you always do UIViewController, then use addChildViewController public API in your new combinedViewController -viewDidLoad: like this:

[self addChildViewController:aViewController];
[self.scrollView addSubview:aViewController.view];
[aViewController didMoveToParentViewController:self];

Here’s what the code does:

  • It calls the container’s addChildViewController: method to add the child.
  • It accesses the child’s view property to retrieve the view and adds it to its own view hierarchy. The container sets the child’s size and position before adding the view; containers always choose where the child’s content appears.
  • It explicitly calls the child’s didMoveToParentViewController: method to signal that the operation is complete.

Do this operation with each of your viewControllers. Afterwards, set your combinedViewController as a rootViewController.

if you need further explanation, feel free to ask.

Reference: Design custom container view controller

Here you are my Objective-C Github sample code

UPD: Thanks @Oliver Atkinson for clarifying that addChildViewController: method also calls the child’s willMoveToParentViewController: method automatically.

Results:

这篇关于设置UIScrollView以在3个视图控制器之间滑动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆