在表视图中滚动问题

时间:2013-06-26 13:17:22

标签: iphone ios objective-c uitableview

我有UITableView我正在使用自定义单元格显示表格视图。

我的问题是当我滚动表视图时,单元格一次又一次地创建。

帮我解决这个问题。

感谢。

//的cellForRowAtIndexPath

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

{

 ListOfProductsCell *cell =(ListOfProductsCell *)[tableView dequeueReusableCellWithIdentifier:@"tableCell"];

if (cell==nil) {

        NSArray *nib =[[NSBundle mainBundle] loadNibNamed:@"ListOfProductsCell" owner:self options:nil];
    cell = (ListOfProductsCell *)[nib objectAtIndex:0];

}

if (tableView == self.searchDisplayProduct.searchResultsTableView) {
    searchProductItemDit=[searchProductListArry objectAtIndex:indexPath.row];
    NSLog(@"searchdit:%@",searchProductItemDit);
    cell.itemNameLbl.text= [searchProductItemDit objectForKey:@"name"];
    self.searchDisplayProduct.searchResultsTableView.separatorColor=[UIColor colorWithRed:200.0 green:0.0 blue:0.0 alpha:1.0];
} else {
    productItemDit=[productListArry objectAtIndex:indexPath.row];
    NSLog(@"dit:%@",productItemDit);
    cell.itemNameLbl.text=[productItemDit objectForKey:@"name"];
}


cell.itemImg.image = [UIImage imageNamed:@"profp.jpg"];

return cell;

}

5 个答案:

答案 0 :(得分:3)

这样做,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellIdentifier";
    ListOfProductsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        Create your custom cell here....

        cell = [[[ListOfProductsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    }

  return cell;
}

答案 1 :(得分:1)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"IDENT"];
    if(cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"IDENT"];
    }
    return cell;
}

像这样重用tableviewcell

答案 2 :(得分:0)

请注意,虽然其他答案是正确的,但如果您使用的是iOS6或更高版本,则应采用较新的API,要求您注册单元格并为其处理创建。

- (void)viewDidLoad {
    [super viewDidLoad];

    // Tell the tableview what cell you're using
    [tableView registerClass:[MyCell class] forCellReuseIdentifier:@"CellIdentifier"];

    // Or if you're using nibs tell the tableView which nib
    [tableView registerNib:YourNib forCellReuseIdentifier:@"CellIdentifier"];
}

如果您正在使用Storyboard,则无需注册您的单元格,它已经为您完成了。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Will not return nil ever if you've registered your class.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];

    // Configure Cell

    return cell;
}

答案 3 :(得分:0)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.searchDisplayProduct.searchResultsTableView)
    {
        return [searchProductListArry count];
    }
    else
    {
        return [productListArry count];
    }
    return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = [NSString stringWithFormat:@"cell %d",indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

        if (tableView == self.searchDisplayProduct.searchResultsTableView) {
            searchProductItemDit=[searchProductListArry objectAtIndex:indexPath.row];
            NSLog(@"searchdit:%@",searchProductItemDit);
            cell.itemNameLbl.text= [searchProductItemDit objectForKey:@"name"];
            self.searchDisplayProduct.searchResultsTableView.separatorColor=[UIColor colorWithRed:200.0 green:0.0 blue:0.0 alpha:1.0];
        } else {
            productItemDit=[productListArry objectAtIndex:indexPath.row];
            NSLog(@"dit:%@",productItemDit);
            cell.itemNameLbl.text=[productItemDit objectForKey:@"name"];
        }


        cell.itemImg.image = [UIImage imageNamed:@"profp.jpg"];

    }
    // Configure the cell.
    return cell;
}

答案 4 :(得分:-1)

如果您使用的是ARC,请执行下面给出的cellForRowAtIndexPath方法。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YourIdentifier"];
    if(cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:@"YourIdentifier"];
    }
    return cell; }

如果您没有使用ARC,请执行下面给出的cellForRowAtIndexPath方法。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YourIdentifier"];
    cell = nil;
    if(cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault     reuseIdentifier:@"YourIdentifier"] autorelease];
    }
    return cell;
}