This most likely happens because your switch is only creating the views for index path (0,0), other index paths are not created...
also you are using cells wrong 1 cell identifier per row, per section? this is not reusing any cell at all (it's not bad but it could be better, arrange by type, etc)
Okay I got it... what happens is that you are only creating elements for the first cell... for the very first cell only (section 0,row 0) you create EVERY CONTROL, and add them as subviews with some offset (that so happens is equal to the label height) this is WRONG.
At the very moment the first row is no longer visible, all your controls disappear (remember they are created for the first row only (they look like they are on other cells but thats because you are pasting them out of the cells bounds...)
What you should be doing is.
YourClass *object = [parBusResponseWebServ.controlsList objectAtIndex:indexPath.row];
//With this object you can create the text
if ([[object tipoControl] isEqualToString:@"TX"]) {
UILabel *label = [functions createLabel:[object textoControl]
locationX:locationXLabel
locationY:locationYLabel
labelWidth:widthLabel
labelHeight:30
numLabelTag:tagControls
labelAdjustment:UIViewAutoresizingFlexibleRightMargin];
UITextField *textfield = [functions createTextField:@" "
locationX:locationXControl
locationY:locationYControl
textFieldlWidth:150
textFieldHeight:30
keyboardType:UIKeyboardTypeDefault
placeholderText:[[object requerido] isEqualToString:@"TRUE"] ? @"Requerido***" : @"Introduce Texto"
numTextFieldTag:tagControls
textFieldAdjustment:UIViewAutoresizingFlexibleWidth];
tagControls += 1;
[cell addSubview:label];
[cell addSubview:textfield];
[self.controlsArray addObject:textfield];
}
Or something like that... also if i can persuade you of this kind of programming... you should not be using labels but the ones that are already on the cell
/*Prior to anything, create a NSMutableDictionary to hold the textfields that you are creating*/
self.textFieldDictionary = [[NSMutableDictionary alloc]init];
On cellForRow
//Use only one reuse identifier (much quicker and less memory intensive)
static NSString *reuseIdentifier = @"cell";
UITableViewCell *cell = tableView dequeue....
if(!cell) {
cell = [UITableViewCell alloc]initWithStyle:....
}
//Remove any other textfield
for (UIView *view in cell.contentView.subviews)
[view removeFromSuperview];
cell.textLabel.text = [object textoControl];
/*Recover previously created TEXTFIELD*/
NSString *key = [[NSNumber numberWithInt:indexPath.row]stringValue];
UITextField *textField = [self.textFieldDictionary objectForKey:key];
if(!textField){
textField = /*Create textfield*/
[self.textFieldDictionary setObject:textField forKey:key]
}
[cell.contentView addSubview:textField]
return cell;
This way you put an element PER row, not all elemnts on a single row (in which case if the row dissapears so will the other elements)
I gave the best answer i can give you... and i hope you use indexPath.. it's your friend (or worst enemy)