[我正在用Objective-C开发一个动态应用程序,该应用程序从WebServer解析XML并向我的tableView控制器指定应打印多少控件以及哪些控件(标签,文本字段...应该像公式一样打印)
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS91OGFIWS5wbmcifQ==” alt =“在此处输入图像描述”>
事情是...如果我的屏幕无法显示所有控件,我将使用滚动条浏览我的所有场景,直到一切正常为止,但是...当我这样做时,我所有的控件(标签, textfields)消失!!!!!让我所有的tableviewcell都留空!!
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9CNFptYi5wbmcifQ==” alt =“在此处输入图像描述”>
如果我松开滚动条并返回到原始位置(在顶部),则会再次打印我所有的控件,但文本字段内的所有信息都消失了。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9HRndUeS5wbmcifQ==” alt =“在此处输入图像说明”>“ >>
我想这是由于内存不足(内存不足),如何将所有控件(如属性)存储为(强)以使其保持活动状态
注意:我无法控制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;
}
[我正在用Objective-C开发一个动态应用程序,该应用程序从WebServer解析XML并向我的tableView控制器指定应该打印多少个控件(如标签,文本字段,如...
这很可能发生,因为您的交换机仅创建索引路径(0,0)的视图,而未创建其他索引路径...
您也使用错误的单元格每节每节1个单元格标识符?这根本不重用任何单元格(虽然不错,但是可以更好,按类型排列,等等)
因为这与我之前的答案完全不同。我添加一个新的。
您使用ARC吗?您将定义一个具有强度的NSMutableArray,并将所有动态控制对象添加到此数组。
将把我得到的答案归功于Heavy_Bullets