带有3个UIViewController子视图的UIScrollView

时间:2014-06-21 04:41:32

标签: ios iphone objective-c uiviewcontroller uiscrollview

我尝试使用3个UIViewController子视图创建UIScrollView。我做了一些研究,似乎这个问题的答案提供了一个很好的解决方案Setting up UIScrollView to swipe between 3 view controllers,但我不确定。我下载了回答者很好地发布的示例代码https://github.com/gneil90/CustomContainerViewController,我的问题如下:

BViewController *bViewController = [[BViewController alloc]init];
[self addChildViewController:bViewController];
[self.scrollView addSubview:bViewController.view];
[bViewController didMoveToParentViewController:self];

CViewController *cViewController = [[CViewController alloc]init];
CGRect frame = cViewController.view.frame;
frame.origin.x = 320;
cViewController.view.frame = frame;

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

self.scrollView.contentSize = CGSizeMake(640, self.view.frame.size.height);
self.scrollView.pagingEnabled = YES;

示例项目中的代码立即初始化两个UIViewControllers。有没有办法懒惰加载它们/这会提供任何类型的性能增强?如果我的两个视图控制器下载数据,我不想下载这些数据,除非用户实际上正在查看这些屏幕,但是通过这种初始化,用户可以快速查看它们。

1 个答案:

答案 0 :(得分:0)

您可以使用UIScrollView委托方法,只需初始化第一个视图控制器。 对于视图控制器的其余部分,您可以创建属性。在UIScrollView委托方法scrollViewDidScroll中执行以下操作 -

// Check at what index, to second VC or third VC
if (some condition, you can define this based on scroll postion) {

// Check if second view controller
    if (!self.cViewController) {
        cViewController = [[CViewController alloc]init];
        CGRect frame = cViewController.view.frame;
        frame.origin.x = 320;
        cViewController.view.frame = frame;
    }
// similarly for third 
}

使用此视图控制器会根据需要进行初始化。