简体   繁体   English

如果第一次填充表格视图,如何限制第二次填充单元格

[英]How restrict tableview to fill cell second time if it filled first time

In my TableView I am setting image and two label, it filling fine. 在我的TableView中,我正在设置图像和两个标签,它填充得很好。 But when I scrolling TableView down and then re view that filled cell than it will refill. 但是,当我向下滚动TableView然后重新查看该已填充的单元格时,它将重新填充。 now i am filling my ImageView with the image which come from URL so it will create load for my user. 现在,我用来自URL的图像填充ImageView,以便为用户创建负载。

So can i restrict my TableView that if my cell is filled first time that it will not fill again. 所以我可以限制我的TableView吗,如果我的单元格第一次被填充,它将不会再次填充。

This is my code : 这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

    UITableViewCell * cell = [atableView  dequeueReusableCellWithIdentifier: nil];

    if(cell == nil) {

        cell = [[UITableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault
                reuseIdentifier:SimpleTableIdentifier];

        ChannelList *channelList = nil;
        if (searchedData.count ==0) {
            channelList = [channelAllData objectAtIndex:[indexPath section]];
        } else {
            channelList = [searchedData objectAtIndex:[indexPath section]];
        }


        UIImageView *aImageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 10, 50, 50)];
        aImageView.image = [UIImage imageNamed:@"tv-defolt.png"];
        NSString * mystr = [channelList channelLogo];

        if (mystr.length !=0) {
            //get a dispatch queue
            dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
            //this will start the image loading in bg
            dispatch_async(concurrentQueue, ^{
                NSString * str = [NSString stringWithFormat:@"http://manektech.net/mttv/Channel/%@",[channelList channelLogo]];
                NSData *image = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:str]];

                //this will set the image when loading is finished
                dispatch_async(dispatch_get_main_queue(), ^{
                    aImageView.image = [UIImage imageWithData:image];
                });
            });
        } else {
            aImageView.image = [UIImage imageNamed:@"tv-defolt.png"];
        }

        [cell addSubview:aImageView];


        UILabel *nameTextLabel =  [[UILabel alloc] initWithFrame: CGRectMake(80, 15, 175, 20)];
        nameTextLabel.textColor = [UIColor blackColor];
        nameTextLabel.backgroundColor = [UIColor clearColor];
        nameTextLabel.text = [channelList channelName];
        nameTextLabel.font = [UIFont fontWithName:@"Arial" size:14];
        [cell addSubview:nameTextLabel];

        UILabel *genreTextLabel =  [[UILabel alloc] initWithFrame: CGRectMake(80, 35, 175, 20)];
        genreTextLabel.textColor = [UIColor grayColor];
        genreTextLabel.backgroundColor = [UIColor clearColor];

        NSString * str = [NSString stringWithFormat:@"%@ | %@",[channelList channelType],[channelList channelCounry]];

        genreTextLabel.text = str;
        genreTextLabel.font = [UIFont fontWithName:@"Arial" size:14];
        [cell addSubview:genreTextLabel];


    cell.selectionStyle = UITableViewCellSelectionStyleGray;


    }
    return cell;

}

Try this logic may be it will wrk for you.. 尝试这种逻辑,可能会为您服务。

- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

     NSString *SimpleTableIdentifier = [NSString stringWithFormat:@"Cell%d%d",indexPath.section,indexPath.row]; /// set different idenfifier for all cell

    UITableViewCell * cell = [atableView  dequeueReusableCellWithIdentifier: SimpleTableIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:SimpleTableIdentifier] autorelease];
        /// Add UIImageView and UILable here 
    }    
}

i hope this helpful to you.... 我希望这对您有帮助。

You should use SDWebImage to avoid lazy table scrolling. 您应该使用SDWebImage避免延迟表滚动。 It uses caching and avoid requesting images URL everytime. 它使用缓存,避免每次都请求图像URL。

Crete Your UILabel and UIImageview in Between 克里特岛之间的UILabelUIImageview

if(cell == nil) 
{
    cell = [[UITableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault

  .
  .
  .

    // create `UILabel` and `UIImageview`  here add add it to cell.contentView
}

And both in cell.contentView 两者都在cell.contentView

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM