慢UITableView滚动

时间:2011-05-24 14:37:31

标签: iphone ios4 uitableview scroll

编辑-----我在英文记录上完成相同的代码滚动速度像往常一样保持快速并且工作正常,但是当我获取阿拉伯数据时,滚动再次变慢。这是阿拉伯数据的问题???

我有大约100的记录,我的tableview滚动非常慢。任何人都可以告诉我这段代码有什么问题,为什么我会慢慢滚动?

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

    GreetingAppDelegate *appdelegate = (GreetingAppDelegate *)[[UIApplication sharedApplication]delegate];
    DBSetter *product = (DBSetter *)[appdelegate.myrecords objectAtIndex:indexPath.row];    

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.font=[UIFont fontWithName:@"Arial" size:16.0];
    }


    CGRect a=CGRectMake(8, 0, 307, 59);
    UIImageView *aImg=[[UIImageView alloc] initWithFrame:a];
    UIImageView *bImg=[[UIImageView alloc] initWithFrame:a];

    //if(indexPath.row%2==0)
    aImg.image=[UIImage imageNamed:@"cell-arrow.png"];


    //else {
    //  aImg.image=[UIImage imageNamed:@"CellHighlight.png"];   
    //}



    bImg.image=[UIImage imageNamed:@"cell-arrow-h.png"];
    [aImg setContentMode:UIViewContentModeScaleToFill];
    [bImg setContentMode:UIViewContentModeScaleToFill];
    cell.backgroundView=aImg;
    cell.selectedBackgroundView=bImg;
    [aImg release];
    [bImg release];


    NSString *tempStr=[NSString stringWithFormat:@"%@",product.tempdesc];

    //int stringlength=[tempStr length];
    //[[tempStr stringByReplacingOccurrencesOfString:@"<Dear User>" withString:@" "] substringWithRange:NSMakeRange(0, 20)];

    //if (stringlength >20) {
    //cell.textLabel.text = [NSString stringWithFormat:@"%@...", [[tempStr stringByReplacingOccurrencesOfString:@"<Dear user>" withString:@""] substringWithRange:NSMakeRange(0, 30)]];
    //}
    //else {
        cell.textLabel.text = tempStr;
    //}


    if(appdelegate.lang==2) 

    {
        [cell setTextAlignment:UITextAlignmentRight];
aImg.transform = CGAffineTransformMakeScale(-1, 1);
        bImg.transform = CGAffineTransformMakeScale(-1, 1);
    }

    return cell;
}

4 个答案:

答案 0 :(得分:3)

可能的原因可能是您正在创建单元格创建块外部的图像。试试这个

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.textLabel.font=[UIFont fontWithName:@"Arial" size:16.0];
    CGRect a=CGRectMake(8, 0, 307, 59);
    UIImageView *aImg=[[UIImageView alloc] initWithFrame:a];
    UIImageView *bImg=[[UIImageView alloc] initWithFrame:a];

    aImg.image=[UIImage imageNamed:@"cell-arrow.png"];

    bImg.image=[UIImage imageNamed:@"cell-arrow-h.png"];
    [aImg setContentMode:UIViewContentModeScaleToFill];
    [bImg setContentMode:UIViewContentModeScaleToFill];
    cell.backgroundView=aImg;
    cell.selectedBackgroundView=bImg;
    [aImg release];
    [bImg release];
}

答案 1 :(得分:2)

我首先看到的是:你没有利用回收利用!

尽可能在if (cell == nil)区块中进行操作。每次项目滚动时,避免创建图像视图和其他类似的东西。

我看到的回收单元的唯一有意义的代码是cell.textLabel.text = tempStr;行。

答案 2 :(得分:1)

您是否尝试使用该图像作为背景制作自定义UITableViewCell?您可以在自定义TableViewCell的setSelected函数中选择后更改背景。

答案 3 :(得分:0)

感谢每一位回复......我只是想出了自己。我只是使用长度和范围来使它工作。对于可能遇到同样问题的人,我使用的代码如下所示。

NSString *tempStr=[NSString stringWithFormat:@"%@",product.tempdesc];

    int stringlength=[tempStr length];
    if (stringlength >20) {
    cell.textLabel.text = [NSString stringWithFormat:@"%@...", [[tempStr stringByReplacingOccurrencesOfString:@"<Dear user>" withString:@""] substringWithRange:NSMakeRange(0, 30)]];
    }
    else {
    cell.textLabel.text = tempStr;
    }