0

我有一个包含一个UIScrollView名为 containerScrollView 的主视图控制器。此滚动视图在每个页面上都有另一个滚动视图,其屏幕大小包含两个视图控制器:MessagesViewControllerInfoViewController. 这是一个模式。

我的应用程序架构

containerScrollView 中的 personScrollView 工作正常,但问题在于将两个视图控制器的视图添加到 personScrollView。

@property (nonatomic, retain) MessagesViewController *matchesVC;
@property (nonatomic, retain) InfoViewController *standingsVC;


for (int i = 0; i < 3; i++) {
    UIScrollView *personScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(i*320, 0, 320, self.containerScrollView.frame.size.height)];
    NSArray *colors = @[[UIColor blueColor], [UIColor orangeColor], [UIColor greenColor]];
    [personScrollView setBackgroundColor:[y objectAtIndex:i]];
    [personScrollView setPagingEnabled:YES];
    [personScrollView setContentSize:CGSizeMake(self.view.frame.size.width * 2, personScrollView)];
    [self.containerScrollView addSubview:personScrollView];

    /* Populate the scrollview */
    // Messages
    if (self.messagesVC == nil)
    {
        self.messagesVC = [[MessagesViewController alloc] init];
        [self.messagesVC setFrame:CGRectMake(0, 0, 320, self.containerScrollView.frame.size.height)];
    }
    [personScrollView addSubview:self.messagesVC.view];

    // Info
    if (self.infoVC == nil)
    {
        self.infoVC = [[InfoViewController alloc] init];
        [self.infoVC setFrame:CGRectMake(320, 0, 320, self.containerScrollView.frame.size.height)];
    }
    [personScrollView addSubview:self.infoVC.view];
}

[self.containerScrollView setContentSize:CGSizeMake(320*3, self.containerScrollView.frame.size.height)];

问题是两个视图控制器(消息和信息)只添加一次,并且添加到 containerScrollView 的最后一个 personScrollView。

如何将视图控制器添加到我所有的 personScrollViews?财产声明有问题吗?

我已经阅读了一些关于这种滥用视图控制器的内容,但这是唯一的解决方案。这两个视图控制器中确实有很多代码,我无法将其添加到我的 rootviewcontroller 中。

4

3 回答 3

0

问题在于您对视图控制器和视图之间的区别的理解。您需要阅读创建自定义容器视图控制器

于 2013-10-24T16:19:56.077 回答
0

苹果文档说:

视图只能有一个超级视图。如果视图已经有一个超级视图并且该视图不是接收者,则此方法会在使接收者成为其新的超级视图之前删除先前的超级视图。

您创建了一次控制器,但您想将他们的视图添加到三个不同的父视图中三次。你不能那样做。

于 2013-10-24T17:11:51.707 回答
0

我最终创建了多个视图控制器实例并将它们存储在一个数组中。不是一个很好的解决方案,但我能找到最好的解决方案。

@property (strong, nonatomic) MessagesViewController *messagesVC1;
@property (strong, nonatomic) MessagesViewController *messagesVC2;
@property (strong, nonatomic) MessagesViewController *messagesVC3;
@property (strong, nonatomic) MessagesViewController *messagesVC4;
@property (strong, nonatomic) MessagesViewController *messagesVC5;
@property (strong, nonatomic) MessagesViewController *messagesVC6;

self.messagesVC1 = [[MessagesViewController alloc] initWithData:data];
self.messagesVC2 = [[MessagesViewController alloc] initWithData:data];
self.messagesVC3 = [[MessagesViewController alloc] initWithData:data];
self.messagesVC4 = [[MessagesViewController alloc] initWithData:data];
self.messagesVC5 = [[MessagesViewController alloc] initWithData:data];
self.messagesVC6 = [[MessagesViewController alloc] initWithData:data];
self.messagesVCArray = @[self.messagesVC1, self.messagesVC2, self.messagesVC3, self.messagesVC4, self.messagesVC5, self.messagesVC6];

MessagesViewController *messagesVC = [self.messagesVCArray objectAtIndex:i];
[messagesVC setFrame:CGRectMake(0, 0, 320, leagueScrollView.frame.size.height)];
[leagueScrollView addSubview:messagesVC.view];
于 2013-10-26T13:21:49.547 回答