-1

我有 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;

}

4

5 回答 5

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;
}
于 2013-06-26T13:20:07.080 回答
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

于 2013-06-26T13:19:01.360 回答
0

请注意,虽然其他答案是正确的,但如果您使用的是 iOS6 或更高版本,则应采用更新的 API,该 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;
}
于 2013-06-26T13:26:05.773 回答
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;
}
于 2013-06-27T11:57:05.153 回答
-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;
}
于 2013-06-26T13:26:45.283 回答