-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

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 に答える
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"];
}

ストーリーボードを使用している場合、セルを登録する必要はありません。すでに登録されています。

- (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 に答える
-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 に答える