objective-C - How to keep in memory dynamic control objects in my tableview
I'm developing a dinamic app in objective-C which parses from a webServer
an XML and specifies to my tableView controller how many and which
controls (labels, textfields... should print, like a formulary)
The thing is... if my screen can't show all the controls, I use the scroll
to navigate through all my scene, til then everything is okay but... When
I do that, all my controls (labels, textfields) dissapear!!!Leaving all my
tableviewcells empty!!!
If I release the scroll and gets back to original position (on top), all
my controls are printed again, but all the information inside textfields
is gone,
I guess it is because of a memory thing (weak memory), how can I store all
my controls with (strong) like a property to keep them alive
Note: I can't control the amount and type of controls that my webService
sends throught the XML...
this is how I do so far:
- (void)viewDidLoad
{
[super viewDidLoad];
if ([[UIDevice currentDevice].model hasPrefix:@"iPhone"]){
locationXLabel = 20;
locationXControl = 150;
widthLabel = 130;
}
if ([[UIDevice currentDevice].model hasPrefix:@"iPad"]){
locationXLabel = 65;
locationXControl = 250;
widthLabel = 190;
}
locationYLabel = 10;
locationYControl = 15;
//WebService for printing controls
if (!parBusResponseWebServ) parBusResponseWebServ = [[ParBusResponseWS
alloc]imprimePantallaBusqueda];
while ([parBusResponseWebServ transacWebServCompleto] == Nil) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate distantFuture]];
}
//if webservice loads incomplete sends this message and exit
if ([[parBusResponseWebServ transacWebServCompleto]
isEqualToString:@"FALSE"] ||
[[parBusResponseWebServ controlsList] count] <= 0) {
parBusResponseWebServ = Nil;
return;
}
controlsArray = [[NSMutableArray alloc]init];
self.title = @"Búsqueda";
if (!functions) functions = [[Functions alloc]init];
[self createTableView];
}
-(void)createTableView{
//this instance, creates, sets as a delegate and displays tableview
self.myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0,
self.view.frame.size.width,
self.view.frame.size.height)style:UITableViewStyleGrouped];
self.myTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleWidth;
self.myTableView.backgroundView = nil;
self.myTableView.backgroundColor =
UIColorFromRGB(tableViewBackgroundColor);
self.myTableView.separatorColor =
UIColorFromRGB(tableViewSeparatorColor);
self.myTableView.separatorStyle =
UITableViewCellSeparatorStyleSingleLineEtched;
self.myTableView.delegate = self;
self.myTableView.dataSource = self;
[self.view addSubview:self.myTableView];
}
//Sets and returns the contents that will have each row of the table
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellIdentifier = [NSString
stringWithFormat:@"s%i-r%i", indexPath.section, indexPath.row];
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
switch (indexPath.section) {
case 0:
{
switch (indexPath.row) {
case 0:{
for (int i = 0; i <
[parBusResponseWebServ.controlsList count]; i++) {
if ([[[parBusResponseWebServ.controlsList
objectAtIndex:i]tipoControl]
isEqualToString:@"TX"]) {
UILabel *label = [functions
createLabel:[[parBusResponseWebServ.controlsList
objectAtIndex:i] textoControl]
locationX:locationXLabel
locationY:locationYLabel
labelWidth:widthLabel
labelHeight:30
numLabelTag:tagControls
labelAdjustment:UIViewAutoresizingFlexibleRightMargin];
tagControls += 1;
UITextField *textfield = [functions
createTextField:@" "
locationX:locationXControl
locationY:locationYControl
textFieldlWidth:150
textFieldHeight:30
keyboardType:UIKeyboardTypeDefault
placeholderText:[[[parBusResponseWebServ.controlsList
objectAtIndex:i]requerido]
isEqualToString:@"TRUE"]
?
@"Requerido***"
:
@"Introduce
Texto"
numTextFieldTag:tagControls
textFieldAdjustment:UIViewAutoresizingFlexibleWidth];
tagControls += 1;
[cell addSubview:label];
[cell addSubview:textfield];
[controlsArray addObject:textfield];
locationYControl += 45;
locationYLabel += 45;
}
if ([[[parBusResponseWebServ.controlsList
objectAtIndex:i]tipoControl]
isEqualToString:@"CB"]) {
UILabel *label = [functions
createLabel:[[parBusResponseWebServ.controlsList
objectAtIndex:i] textoControl]
locationX:locationXLabel
locationY:locationYLabel
labelWidth:widthLabel labelHeight:30
numLabelTag:tagControls
labelAdjustment:UIViewAutoresizingFlexibleRightMargin];
tagControls += 1;
UITextField *campotexto = [functions
createTextField:@" "
locationX:locationXControl
locationY:locationYControl
textFieldlWidth:120
textFieldHeight:30
keyboardType:UIKeyboardTypeDefault
placeholderText:@"Seleccione"
numTextFieldTag:tagControls
textFieldAdjustment:UIViewAutoresizingFlexibleWidth];
tagControls += 1;
UIButton *button =[functions
createButton:@" "
locationX:270
locationY:locationYLabel
buttonWidth:30
buttonHeight:30
buttonType:UIButtonTypeDetailDisclosure
numButtonTag:tagControls
buttonAdjustment:UIViewAutoresizingFlexibleLeftMargin];
[button addTarget:self
action:@selector(action)
forControlEvents:(UIControlEvents)UIControlEventTouchUpInside];
[cell addSubview:label];
[cell addSubview:campotexto];
[cell addSubview:button];
[controlsArray addObject:campotexto];
locationYControl += 45;
locationYLabel += 45;
}
if ([[[parBusResponseWebServ.controlsList
objectAtIndex:i]tipoControl]
isEqualToString:@"TA"]){
locationYControl += 30;
UILabel *label = [functions
createLabel:[[parBusResponseWebServ.controlsList
objectAtIndex:i] textoControl]
locationX:locationXLabel
locationY:locationYLabel
labelWidth:widthLabel
labelHeight:30
numLabelTag:tagControls
labelAdjustment:UIViewAutoresizingFlexibleRightMargin];
tagControls += 1;
UITextView *textView = [functions
createTextArea:@" "
locationX:locationXLabel
locationY:locationYControl
textViewlWidth:280
textViewHeight:70
keyboardType:UIKeyboardTypeDefault
numTextViewTag:tagControls
textViewAdjustment:UIViewAutoresizingFlexibleRightMargin];
tagControls += 1;
[cell addSubview:label];
[cell addSubview:textView];
[controlsArray addObject:textView];
locationYControl += 135;
locationYLabel += 130;
}
}
}
break;
default:
break;
}
break;
default:
break;
}
}
}
return cell;
}
No comments:
Post a Comment