将 viewController 视图添加到 UIScrollView

Posted

技术标签:

【中文标题】将 viewController 视图添加到 UIScrollView【英文标题】:Adding viewController views to UIScrollView 【发布时间】:2012-02-12 04:30:20 【问题描述】:

尽管有很多类似的帖子,但我仍然无法正常工作。 我有两个 UIViewControllers,我在 IB 中设计了 UILabels 和 imageviews 等。 我想将这些添加到滚动视图中,以便在它们之间进行分页。

我定义了将每个scrollViewcontroller 与其在IB 中的元素连接起来的出口,但是,控制器本身是我在viewDidLoad 中的主视图控制器内以编程方式创建的。创建它们后,我从主视图控制器分配一些值,而不是将其作为子视图添加到 scrollViewController。但是什么都没有显示。从我所做的调试中,当我在分配值后设置断点时,我可以看到元素为零。它们应该从 xib 文件中加载,但似乎没有被读取。即使作为测试,我也尝试初始化其中一个元素(例如 UILabel)并将其设置为该子视图控制器,但它什么也不会显示。这里有一些代码可以更好地解释一下。

在主视图控制器中

    detailControllerA *tempA = [[detailControllerA alloc] initWithNibName:@"detailOverviewA" bundle:nil];
    self.overviewA = tempA;
[tempA release];
self.overviewA.someLabel.text = @"Some Text";
    detailScrollView.contentSize = CGSizeMake(scrollWidth, scrollHeight);
    detailScrollView.pagingEnabled = YES;

[detailScrollView addSubview:self.overviewA.view];

在 detailControllerA 实现中,我在 loadView 中设置了框架:

-(void)loadView 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 90)];
    self.view = view;
    [view release];


我还在 detailControllerA.h 中使用 IBOutlets 定义了标签等,并在 xib 文件中实现了元素。

任何想法为什么 xib 在以编程方式创建时无法正确加载?

【问题讨论】:

我猜你需要在做任何事情之前调用 [super loadView]。即使您从 nib 加载,我确信 loadView 仍然是在控制器中创建视图所需的一些方法。 我现在想通了,有趣的是,-(void)loadView 是问题所在。由于视图是在界面构建器中生成的(使用框架设置),当 loadView 触发时,它正在创建一个新视图,将界面构建器中创建的视图吹走。 【参考方案1】:

这样试试:

       NSUInteger scrollContentCount = 0;

       for (NSUInteger arrayIndex = 0; 
             arrayIndex < [contents count]; 
             arrayIndex++) 


        // set scorllview properties
        CGRect frame;
        frame.origin.x = self.mScrollView.frame.size.width * arrayIndex;
        frame.origin.y = 0;
        frame.size = self.mScrollView.frame.size;

        myScrollView.autoresizingMask = YES;

        // alloc - init PODetailsView Controller
        myController = [[MyController alloc] initWithNibName:@"MyController" bundle:[NSBundle mainBundle]];

        [myController.view setFrame:frame];

        // add view in scroll view
        [self.myScrollView addSubview:myController.view];

        scrollContentCount = scrollContentCount + 1;
    

// set scroll content size
self.myScrollView.contentSize = 
    CGSizeMake(self.myScrollView.frame.size.width * scrollContentCount, 
                         self.myScrollView.frame.size.height);

不要释放for循环中的内容控制器对象。

根据您的要求设置您的 scrollView contentSize

希望这对你有帮助。

【讨论】:

【参考方案2】:

有趣的是,-(void)loadView 是问题所在。

由于视图是在界面构建器中生成的(使用框架设置),当 loadView 触发时,它正在创建一个新视图,将界面构建器中创建的视图吹走。

【讨论】:

以上是关于将 viewController 视图添加到 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

必须使用延迟实例化的UI视图将子视图添加到视图控制器两次

如何在 ViewController 中调用视图?

您如何以编程方式添加 UI/视图控制器?

将 viewController 视图添加到 UIScrollView

如何将collectionview作为子视图添加到viewcontroller

如何从一个 viewController 添加多个 segue