0

我有一个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;
}
4

2 回答 2

1

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

做一个全局计数 int count = 10;

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

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

我希望这可以帮助你。

于 2013-05-27T06:56:29.740 回答
0

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

于 2013-05-27T18:59:04.770 回答