удалить представления / контроллеры из UIScrollView / PageControl во время выполнения - PullRequest
0 голосов
/ 03 марта 2011

Я использую scrollview и pagecontrol для рендеринга нескольких изображений, очень похожих на встроенное фото приложение.Я использую этот код для настройки контроллеров при загрузке представления:

NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < [photos count]; i++) {
    [controllers addObject:[NSNull null]];
}
self.viewControllers = controllers;
[controllers release];

scrollArea.pagingEnabled = YES;
scrollArea.contentSize = CGSizeMake(newW * [photos count], newH);
scrollArea.showsHorizontalScrollIndicator = NO;
scrollArea.showsVerticalScrollIndicator = NO;
scrollArea.scrollsToTop = NO;
scrollArea.delegate = self;

pageControl.numberOfPages = [photos count];

newW и newH - это всего лишь две переменные, которые я использую для отслеживания размера при изменении ориентации.Мой метод loadScrollViewWithPage:

- (void) loadScrollViewWithPage:(int)page {
    if (page < 0) return;
    if (page >= [photos count]) return;

    PhotoViewController *controller = [viewControllers objectAtIndex:page];

    if ((NSNull *)controller == [NSNull null]) {
        controller = [[PhotoViewController alloc] init];
        controller.imgPath = (NSString *)[photos objectAtIndex:page];
        [viewControllers replaceObjectAtIndex:page withObject:controller];
        [controller release];
    }

    if (nil == controller.view.superview) {

        CGRect frame = scrollArea.frame;
        frame.origin.x = frame.size.width * page;
        frame.origin.y = 0;
        controller.view.frame = frame;
        [scrollArea addSubview:controller.view];        
    }
}

И вот моя проблема.Мне нужно выгрузить контроллеры / представления, когда мне это нужно.Я думал, что мог бы использовать что-то вроде этого:

for (unsigned i = 0; i < [photos count]; i++) {
    [self.viewControllers replaceObjectAtIndex:i withObject:[NSNull null]];
}

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

Я тоже попробовал что-то вроде этого без удачи:

for(UIView *subview in [self.scrollArea subviews]) {
 [subview removeFromSuperview];
}

Есть идеи?

1 Ответ

0 голосов
/ 03 марта 2011

Итак, вы хотите убедиться, что подпредставления scrollView синхронизируются с элементами в self.viewControllers при обновлении последнего? Проще всего делать что-то подобное, когда вы заменяете один из элементов:

UIViewController *vc = [self.viewControllers objectAtIndex:i];
if ((NSNull *)vc != [NSNull null] && [vc isViewLoaded]) [vc.view removeFromSuperview];
[self.viewControllers replaceObjectAtIndex:i withObject:foo];
...