视图控制器视图仅添加一次

时间:2013-10-24 16:12:57

标签: ios uiviewcontroller childviewcontroller

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

Schema of my app

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中。

3 个答案:

答案 0 :(得分:0)

问题在于您了解视图控制器和视图之间的区别。您需要阅读Creating Custom Container View Controllers

答案 1 :(得分:0)

Apple doc说:

  

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

您可以创建一次控制器,但是您希望将它们的视图添加三次,添加到三个不同的父视图中。你不能这样做。

答案 2 :(得分: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];