我正在使用 Objective-C 开发一个动态应用程序,它从 webServer 解析 XML 并向我的 tableView 控制器指定有多少和哪些控件(标签、文本字段......应该打印,就像一个公式)
问题是......如果我的屏幕无法显示所有控件,我会使用滚动浏览我的所有场景,直到一切正常,但是......当我这样做时,我的所有控件(标签,文本字段) dissapear!!!让我所有的tableviewcells都空着!!!
如果我释放滚动并返回到原始位置(在顶部),我的所有控件都会再次打印,但文本字段中的所有信息都消失了。
我想这是因为内存问题(弱内存),我怎样才能像属性一样存储我的所有控件(强)以使它们保持活力
注意:我无法控制我的 webService 通过 XML 发送的控件的数量和类型...
这就是我到目前为止的做法:
@property (nonatomic, strong) NSMutableArray *controlsArray;
@property (nonatomic, strong) UITableView *myTableView;
- (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;
}
self.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];
[self.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];
[self.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];
[self.controlsArray addObject:textView];
locationYControl += 135;
locationYLabel += 130;
}
}
}
break;
default:
break;
}
break;
default:
break;
}
}
}
return cell;
}