2011-03-03 85 views
0

我使用scrollview和pagecontrol渲染几个图像,非常类似于内置的照片应用程序。在运行时从UIScrollView/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]; 

东西方妇女网络和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]]; 
} 

我想这样做,所以加载全新的意见纳入了滚动。

我也试过一些liek这个没有运气:

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

任何想法?

回答

0

因此,当您更新后者时,您想要确保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]; 
相关问题