如何逐个加载UITableview

时间:2013-05-27 06:41:49

标签: ios uitableview

我有一个UITableView来自后端的加载次数(实际上那些是歌曲的网址)。这些是JSON格式。现在我的问题是,当歌曲数量增加时,桌子会卡住。滚动很难。那我怎么能避免这个呢?

我正在加载主视图顶部的视图。在主视图中viewDidLoad

  arrSongList=[[NSMutableArray alloc]init];

  arrSongList=[ws GetSongs];`

然后有一个菜单来选择歌曲选项。当我点击该菜单单元格时,它会加载歌曲视图。用于加载歌曲视图

-(void)getAllSongsAndReloadTable :(id)sender//1
{
    [viewDisplayArea addSubview:viewSongs];
    [self flipView : viewDisplayArea: viewDisplayArea :  UIViewAnimationTransitionFlipFromLeft];
    [progressAlert dismissWithClickedButtonIndex:0 animated:YES];
}

ViewSongs视图有歌曲表。它以这种方式加载

这适用于numberOfRowsInSection

else if (tableView.tag==4) 
{
    return [arrSongList count];
}

这适用于cellForRowAtIndexPath

else if (tableView.tag==4)//All Songs
{
    cell4 =nil;

    if (cell4 == nil) {

        NSArray *nib =[[NSBundle mainBundle]loadNibNamed:@"SongCell" owner:self options:nil];
        cell4=[nib objectAtIndex:0];
    }


    [cell4 setSelectionStyle:UITableViewCellSelectionStyleNone];

    cell4.lblSong.text=[[arrSongList objectAtIndex:indexPath.row] valueForKey:@"SONGTITLE"];
    cell4.lblArtist.text=[[arrSongList objectAtIndex:indexPath.row] valueForKey:@"ARTISTNAME"];
    NSString *imgUrl=[[arrSongList objectAtIndex:indexPath.row]valueForKey:@"SONGIMG"];
    NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString: imgUrl]];
    UIImage *img = [[UIImage alloc] initWithData:data];
    cell4.imgSong.image=img;


    NSString *imgUrlLarge=[[arrSongList objectAtIndex:indexPath.row]valueForKey:@"SONGIMGLARGE"];
    NSData *dataLarge=[NSData dataWithContentsOfURL:[NSURL URLWithString: imgUrl]];
    UIImage *imgLarge = [[UIImage alloc] initWithData:dataLarge];
    cell4.imgSongLarge=[[UIImageView alloc]init];
    cell4.imgSongLarge.image=imgLarge;



    [cell4.btnTick addTarget:self action:@selector(tickButtonTapped:) forControlEvents:UIControlEventTouchUpInside] ;

    [cell4.btnAddtoMyList addTarget:self action:@selector(topLeft:) forControlEvents:UIControlEventTouchUpInside];
    return cell4;
}

2 个答案:

答案 0 :(得分:1)

你将拥有一系列歌曲网址。并且您可以将表中的行数指定为arrayOfUrlSongs.count。取而代之的是

进行全球统计    int count = 10;

if(arrayOfUrlSongs.count < count)
      return arrayOfUrlSongs.count;
else
{
     return count;
}

在表格的页脚视图中保留重新加载按钮。单击该增量计数10并重新加载表。

我希望这会对你有所帮助。

答案 1 :(得分:0)

您还应该考虑批量加载细胞。我建议查看Sensible TableView框架。该框架将自动从您的Web服务中获取所有歌曲,并根据需要分批分割。应该为你节省大量的工作。