重用滚动视图的单元格

时间:2011-04-11 15:43:40

标签: iphone cocoa-touch

我使用滚动视图以横向方式显示各种项目。

我如何“重用细胞”来节省记忆:

编辑:抱歉不清楚。我计划在每个ImageView中放置一些标签和另一个ImageView,所以我每次都希望重复使用它,而不是每次都实例化新项目。例如更改图像并更新标签而不是重新创建它。

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];

    // load all the images from our bundle and add them to the scroll view
//  NSUInteger i;
    for (int i = 0; i <= 150; i++)
    {
        NSString *imageName = @"tempImage.jpg";
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

        // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
        CGRect rect = imageView.frame;
        rect.size.height = kScrollObjHeight;
        rect.size.width = kScrollObjWidth;
        imageView.frame = rect;
        imageView.tag = i;  // tag our images for later use when we place them in serial fashion
        [self.bestSellScrollView addSubview:imageView];
        [imageView release];
    }

    [self layoutScrollImages];  // now place the photos in serial layout within the scrollview
}

- (void)layoutScrollImages
{
    UIImageView *view = nil;
    NSArray *subviews = [self.bestSellScrollView subviews];

    // reposition all image subviews in a horizontal serial fashion
    CGFloat curXLoc = 0;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
            CGRect frame = view.frame;
            frame.origin = CGPointMake(curXLoc, 0);
            view.frame = frame;

            curXLoc += (kScrollObjWidth);
        }
    }

    // set the content size so it can be scrollable
    [self.bestSellScrollView setContentSize:CGSizeMake((150 * kScrollObjWidth), 
                                                       [self.bestSellScrollView bounds].size.height)];
}

3 个答案:

答案 0 :(得分:0)

如果你的意思是你想让UIImageView(s)保持在滚动视图中,但是你想要更改它们显示的UIImage,请尝试这样的事情:

-(void)changeImageViewWithTag:(NSInteger)aTag toImage:(UIImage *)anImage
{
     UIImageView *theView = [self.bestSellScrollView viewWithTag:aTag];
     if (theView)
     {
         [theView setImage:anImage];
     }
}

答案 1 :(得分:0)

我假设您打算在UIScrollView中重用UIImageView单元实例。 我希望 Daniel Tull的实施可能会有所帮助 -

https://github.com/danielctull/DTGridView

您可能也希望在UIScrollView上看到Apple示例代码(我没有链接,但您可以在网上轻松找到它)

谢谢! Ishank

答案 2 :(得分:0)

如果您的意思是在UITableView中对UITableViewCell的影响,那么它在水平滚动条中是不可能的。

表视图的可重用单元格属性由系统提供,不适用于水平滚动条。

你必须写自己的逻辑才能实现它!这是一个很好的问题。如果有可能的话,将调整到其他答案。