2013-10-24 4 views
0

У меня есть контроллер основного вида, содержащий UIScrollView, называемый containerScrollView. Это scrollview имеет на каждой странице другое scrollview с размером экрана, содержащего два контроллера вида: MessagesViewController и InfoViewController. Вот схема.Просмотр Просмотр контроллеров только один раз добавляется

Schema of my app

personScrollView в containerScrollView работает нормально, но проблема заключается в добавлении зрения двух зрения диспетчеров к 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)]; 

Проблема заключается в том, что два просматривать контроллеры (сообщения и данные) только добавляются один раз, и до последнего personScrollView из containerScrollView.

Как получить контроллеры просмотра, добавленные ко всем моим персонамScrollViews? Что-то не так с объявлением свойства?

Я прочитал что-то об этом злоупотреблении диспетчерами представлений, но это единственное решение. В двух контроллерах представления действительно много кода, и я не могу добавить его в свой rootviewcontroller.

ответ

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]; 
0

Проблема заключается в том, что вы понимаете разницу между контроллерами и представлениями. Вы должны прочитать на Creating Custom Container View Controllers.

+0

Неверно. Я просто хочу контролировать представления в scrollview с помощью другого контроллера представления, чтобы мой код был организован, и я пытаюсь это сделать. – yoeriboven

0

Apple, док говорит:

Представления могут иметь только один SuperView. Если в представлении уже есть супервизор, и это представление не является получателем, этот метод удаляет предыдущий супервизор, прежде чем сделать получателю новый контроль.

Вы создаете свои контроллеры один раз, но вы хотите добавить свои представления три раза, к трем различным родительским представлениям. Вы не можете этого сделать.

Смежные вопросы