Search code examples
iosiphoneuitableviewiphone-sdk-3.0

UITableView: `tableView:cellForRowAtIndexPath:` not called for all rows


I have created a UITableView with 4 Sections and 3 Rows so totally 12 Rows. But

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

The above method only gets called for 9 times instead of 12 times. Why this happening? My 4th section is not getting constructed but my 1st section gets duplicated as 4th section.

Please refer my code below

@interface MainViewController : UITableViewController<UITextFieldDelegate,UITableViewDelegate,UITableViewDataSource>
 {
}
@end


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad 
{
  CGRect frameRect = CGRectMake(0,0,320,460);

  UITableView *tableView = [[UITableView alloc] initWithFrame:frameRect   
  style:UITableViewStyleGrouped];
  tableView.delegate = self;
  tableView.dataSource = self;  
  tableView.backgroundColor = [UIColor purpleColor];
  tableView.scrollEnabled = YES;

  self.view = tableView;
  [tableView release];

  [super viewDidLoad];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return 3;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 4;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
     NSLog(@"CELL IS NIL %i", indexPath.section);

  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil)
  {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

      if (indexPath.section == 0)
      {
          if(indexPath.row == 0)
          {
              cell.text = @"Tmail";

              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
          else if ( indexPath.row == 1 )
          {
              cell.text = @"English";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
          else
          {
              cell.text = @"Hindi";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
      }
      else if (indexPath.section == 1)
      {
          if(indexPath.row == 0)
          {
              cell.text = @"Street";

              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
          else if ( indexPath.row == 1 )
          {
              cell.text = @"City";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
          else
          {
              cell.text = @"State";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
      }
      else if (indexPath.section == 2)
      {
          if(indexPath.row == 0)
          {
              cell.text = @"Salem";

              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
          else if ( indexPath.row == 1 )
          {
              cell.text = @"Samalpatti";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
          else
          {
              cell.text = @"Chennai";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
      }

      else if (indexPath.section == 3)
      {
          if(indexPath.row == 0)
          {
              cell.text = @"NOKIA";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
          else if ( indexPath.row == 1)
          {
              cell.text = @"SAMSUNG";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
          else
          {
              cell.text = @"SONY";
              UITextField *aField = [[UITextField alloc]initWithFrame:CGRectMake(100,10,200,40)];
              aField.placeholder = @"Mandatory";
              aField.delegate = self;
              aField.textColor = [UIColor blackColor];
              [cell addSubview:aField];
              [aField release];
          }
      }
   }

  return cell;
}

enter image description here


Solution

  • actually when you scroll then other rows are created in case you having more rows,so think you need to write this code like this,

    Edited one

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
        {
             NSLog(@"CELL IS NIL %i", indexPath.section);
    
          static NSString *CellIdentifier = @"Cell";
    if (cell == nil) 
        {
    
            CGRect CellFrame = CGRectMake(0, 0, 300, 70);
            cell = [[[UITableViewCell alloc] initWithFrame:CellFrame reuseIdentifier:CellIdentifier] autorelease];
            CGRect labLabelFrame = CGRectMake(5, 5, 250, 40);
            UILabel *lblTemp;
    
            lblTemp = [[UILabel alloc] initWithFrame:labLabelFrame];
            lblTemp.tag = 1;
            [cell.contentView addSubview:lblTemp];
            [lblTemp release];
    
            CGRect textFieldFrame= CGRectMake(200, 5, 120, 30);
    
            UITextField *txt=[[UITextField alloc] initWithFrame:textFieldFrame];
            text.tag=2;
            [cell.contentView addSubview:txt];
            [txt release];
    
        }
         UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
          UITextField *aField=(UITextField *)[cell viewWithTag:2];
    
        aField.text=@"";
        aField.placeholder=@"";
    if (indexPath.section == 0)
                  {
                      if(indexPath.row == 0)
                      {
                          cellLabel.text = @"Tmail";
    
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
                      }
                      else if ( indexPath.row == 1 )
                      {
                          cellLabel.text = @"English";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
    
                      }
                      else
                      {
                          cellLabel.text = @"Hindi";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
    
                      }
                  }
                  else if (indexPath.section == 1)
                  {
                      if(indexPath.row == 0)
                      {
                          cellLabel.text = @"Street";
    
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
                      }
                      else if ( indexPath.row == 1 )
                      {
                          cellLabel.text = @"City";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
    
                      }
                      else
                      {
                          cellLabel.text = @"State";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
                      }
                  }
                  else if (indexPath.section == 2)
                  {
                      if(indexPath.row == 0)
                      {
                          cellLabel.text = @"Salem";
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
                      }
                      else if ( indexPath.row == 1 )
                      {
                          cellLabel.text = @"Samalpatti";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
    
                      }
                      else
                      {
                          cellLabel.text = @"Chennai";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
    
                      }
                  }
    
                  else if (indexPath.section == 3)
                  {
                      if(indexPath.row == 0)
                      {
                          cellLabel.text = @"NOKIA";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
                      }
                      else if ( indexPath.row == 1)
                      {
                          cellLabel.text = @"SAMSUNG";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
    
                      }
                      else
                      {
                          cellLabel.text = @"SONY";
    
                          aField.placeholder = @"Mandatory";
                          aField.delegate = self;
                          aField.textColor = [UIColor blackColor];
    
                      }
                  }
    
    
              return cell;
            }