1

多くのセルを含むテーブル ビューがあります。最初のセルにUIImageView写真を保持するための を配置し、その隣に popOver を開くボタンを配置しました。私の質問は、他のセルが正常に機能しているのに、(cell==nil) をチェックしているにもかかわらず、このセルが再利用されるのはなぜですか。

コードは以下の通りです。

PSこれは、ストーリーボードとxibをプログラムでのみ使用せずに行われます。

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

    static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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


    if (indexPath.section == 0)
    {


        if(indexPath.row==0)
        {

            if(self.imageView==nil)

           {            
           self.imageView  = [[UIImageView alloc] initWithFrame:CGRectMake(30, 2, 50, 40)];

            self.imageView.image = [UIImage imageNamed:@"user.png"];

            self.imageView.backgroundColor=[UIColor blackColor];

           }

            [cell.contentView addSubview:self.imageView];


             if(self.chooseImage==nil)
            {

            self.chooseImage = [[UIButton alloc]initWithFrame:CGRectMake(270, 10, 80, 30)];

            [self.chooseImage addTarget:self action:@selector(chooseImage:) forControlEvents:UIControlEventTouchUpInside];

            self.chooseImage.backgroundColor = [UIColor blackColor];

            [self.chooseImage setTitle:@"CHOOSE" forState:UIControlStateNormal];
            }

            [cell.contentView addSubview:self.chooseImage];

        }
4

1 に答える 1

0

最初のコードでは、メソッドの最後に追加し、return cell;次のコードを使用します。

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

    static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
     {
          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        if(self.imageView==nil)

           {            
           self.imageView  = [[UIImageView alloc] initWithFrame:CGRectMake(30, 2, 50, 40)];

            self.imageView.image = [UIImage imageNamed:@"user.png"];

            self.imageView.backgroundColor=[UIColor blackColor];

           }
            [cell.contentView addSubview:self.imageView];
           if(self.chooseImage==nil)
            {

            self.chooseImage = [[UIButton alloc]initWithFrame:CGRectMake(270, 10, 80, 30)];

            [self.chooseImage addTarget:self action:@selector(chooseImage:) forControlEvents:UIControlEventTouchUpInside];

            self.chooseImage.backgroundColor = [UIColor blackColor];

            [self.chooseImage setTitle:@"CHOOSE" forState:UIControlStateNormal];
            }

            [cell.contentView addSubview:self.chooseImage];

    }


   return cell; // this line is not in your code so add this line.

}
于 2013-03-19T06:48:46.803 に答える