向UIScrollview添加UIViewcontrollers

4
我正在改变一个现有应用程序的布局。现在需要将一系列视图添加到滚动视图中,以便用户可以通过滑动查看下一屏幕。我已经使用以下代码将控制器添加到滚动视图中。

这段代码被添加到包含UIScrolliew的Viewcontroller的viewDidLoad函数中。

int i=1;
int width = 0,height=0;
for(POTCTask *task in [CommonData tasks])
{
    UIViewController<TaskViewController> *controller = [TaskViewFactory getTaskViewController:(task.inputTypeId)];
    width = controller.view.frame.size.width;
    height = controller.view.frame.size.height;
    controller.view.frame = CGRectMake(width*(i-1), 0, width, height);
    [self.scrollView addSubview:controller.view];
    i++;
}
self.scrollView.contentSize = CGSizeMake(width*i, height);

它可以完整加载所有视图。但是,每个视图控制器只调用viewDidLoad方法。其他方法没有被调用。其中一些视图控制器中有UITableviews,但它只显示第一个单元格。
如何在iOS中正确执行此操作?
谢谢。

其他方法没有被调用是因为您没有将viewController推入堆栈中。您只是创建了一个ViewController并将其视图添加到UIScrollView中。 - Raphael Ayres
1个回答

7
我相信你的问题在于你没有将这些视图控制器添加为包含滚动视图的控制器的子控制器。在苹果的《视图控制器编程指南》中,他们提供了如下示例以添加一个子控制器:
[self addChildViewController:content];
content.view.frame = [self frameForContentController];
[self.view addSubview:self.currentClientView];
[content didMoveToParentViewController:self];

还有这个用于删除一个:

[content willMoveToParentViewController:nil];
[content.view removeFromSuperview];
[content removeFromParentViewController];

我相信这将导致其他方法被运行。
以下是需要翻译的内容:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接