将 UIView 控制器添加到 UIScrollview

Posted

技术标签:

【中文标题】将 UIView 控制器添加到 UIScrollview【英文标题】:Adding UIViewcontrollers to UIScrollview 【发布时间】:2013-09-19 14:33:36 【问题描述】:

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

这段代码是在Viewcontroller的viewDidLoad中添加的 持有 UIScrolliew

.

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。 【参考方案1】:

我相信您的问题是您没有将这些视图控制器添加为包含您的滚动视图的控制器的子级。在 Apple 的 View Controller Programming Guide 中,他们提供了添加子控制器的示例:

[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

我相信这会导致额外的方法被运行。

【讨论】:

以上是关于将 UIView 控制器添加到 UIScrollview的主要内容,如果未能解决你的问题,请参考以下文章

将 UIView 控制器添加到 UIScrollview

将 UIView 添加到情节提要

如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT

使用 XIB 将工具栏添加到 UIView

是否可以将 GestureRecognizer 添加到自定义 UIView 子视图中的标签

如何在不将控制器添加到视图层次结构并使其可见的情况下从 UIViewController 获取 UIView?