Note that there are some explanatory texts on larger screens.

plurals
  1. POLoad all cells in UITableView before scrolling
    primarykey
    data
    text
    <p>I have a UITableView with 8 cells(sections) in total in which 6 of them contain textFields as subviews and out of 2 one containing button and the other containing text view.Now I have got a problem here,as we are all aware that when ever the view appears only,the visible cells loads.So when my app gets loaded,I am able to view 5 cells,the first 4 containing text fields and the 5th cell with button.I can see the array count is 4 when i displayed it through logging in console i.e.</p> <pre><code>there are 4 objects in the array </code></pre> <p>Now after scrolling the table view,I can observe the following:</p> <pre><code>there are 6 objects in the array </code></pre> <p>So,what's happening is If I am to save the data entered in the table view,or say edit to make changes to existing data,I am forced to scroll the table view and enter the values in last cell too.So that cannot be the case always with the user because we can't expect him/her to scroll the table view and enter the complete form/table view cell entries.What ever changes he/she makes they will and just click done/save what ever it is..!</p> <p>More over I am having a picker view as input view for last cell containing text field as subview.Hence in my picker view did select row method I am facing crash problem with last cell/section(textField as subview) containing a picker view here is my code snippet for the method:</p> <pre><code>-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { switch (tagValues) { case 105: { self.textField = [self.fields objectAtIndex:3]; self.textField.text = [self.reminder objectAtIndex:row]; } break; case 107: { //Crash occurring in this case,sometimes its working wonder why self.textField = [self.fields objectAtIndex:5]; self.textField.text = [self.group objectAtIndex:row]; } break; } } **Note**:I am using the same textField for adding as subview to all 6 cells,but each one with unique tags and own purpose,i.e. one for editing text using key board,one with date picker,one with general picker etc... </code></pre> <p>I wonder why some times after selecting values from picker view(last section cell) crashes some times and some times works fine.Some times it crashes at the above line commented in <strong>case 107</strong>,some times in main autorelease pool.Some time thread as shown in snap below:</p> <p><img src="https://i.stack.imgur.com/5L14y.png" alt="enter image description here"></p> <p>So is there any way that we can load all cells at once so that all the text fields get added to array before scrolling.There cannot be any problem I believe</p> <p><strong>More Detailed EDITED CODE for understanding:</strong></p> <pre><code>- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //NSString *identifier = @"UITableViewCell"; NSString *cellIdentifierF = nil; static NSString *firstCellIdentifier = @"FirstCell"; static NSString *secondCellIdentifier = @"SecondCell"; static NSString *thirdCellIdentifier = @"ThirdCell"; static NSString *fourthCellIdentifier = @"FourthCell"; static NSString *fifthCellIdentifier = @"FifthCell"; static NSString *sixthCellIdentifier = @"SixthCell"; static NSString *seventhCellIdentifier = @"SeventhCell"; static NSString *eightCellIdentifier = @"EightCell"; if(indexPath.section == 0 &amp;&amp; indexPath.row == 0) { cellIdentifierF = firstCellIdentifier; } else if(indexPath.section == 1 &amp;&amp; indexPath.row == 0) { cellIdentifierF = secondCellIdentifier; } else if(indexPath.section == 2 &amp;&amp; indexPath.row == 0) { cellIdentifierF = thirdCellIdentifier; } else if(indexPath.section == 3 &amp;&amp; indexPath.row == 0) { cellIdentifierF = fourthCellIdentifier; } else if(indexPath.section == 4 &amp;&amp; indexPath.row == 0) { cellIdentifierF = fifthCellIdentifier; } else if(indexPath.section == 5 &amp;&amp; indexPath.row == 0) { cellIdentifierF = sixthCellIdentifier; } else if(indexPath.section == 6 &amp;&amp; indexPath.row == 0) { cellIdentifierF = seventhCellIdentifier; } else if(indexPath.section == 7 &amp;&amp; indexPath.row == 0) { cellIdentifierF = eightCellIdentifier; } UITableViewCell *cell = (UITableViewCell *)[atableView dequeueReusableCellWithIdentifier:cellIdentifierF]; atableView.backgroundColor = [UIColor clearColor]; textField = [[[UITextField alloc]initWithFrame:CGRectMake(15, 12, 300, 24)]autorelease]; textField.textColor = [UIColor whiteColor]; textField.delegate = self; tagValues = textField.tag; switch (indexPath.section) { case 0: { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifierF] autorelease]; cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg-1.png"]]; //Only add content to cell if it is new if([cellIdentifierF isEqualToString: firstCellIdentifier]) { textField.placeholder = @"Enter name"; [self.textField setValue:[UIColor purpleColor] forKeyPath:@"_placeholderLabel.textColor"]; textField.tag = 101; textField.text = reminderInstance.Name; textField.autocorrectionType = UITextAutocorrectionTypeNo; NSLog(@"Value = %@",textField.text); [cell.contentView addSubview:textField]; [self.fields addObject:textField]; } } } break; case 1: { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifierF] autorelease]; cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg-1.png"]]; //Only add content to cell if it is new if([cellIdentifierF isEqualToString: secondCellIdentifier]) { textField.tag = 102; textField.text = reminderInstance.Event; NSLog(@"Value = %@",textField.text); [cell.contentView addSubview:textField]; [self.fields addObject:textField]; } } } break; case 2: { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifierF] autorelease]; cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg-1.png"]]; //Only add content to cell if it is new if([cellIdentifierF isEqualToString: thirdCellIdentifier]) { textField.placeholder = @"Click here to set date and time"; [self.textField setValue:[UIColor purpleColor] forKeyPath:@"_placeholderLabel.textColor"]; textField.inputView = self.datePicker; textField.text = reminderInstance.Date; textField.tag = 103; NSLog(@"Value = %@",textField.text); [cell.contentView addSubview:textField]; [self.fields addObject:textField]; } } } break; case 3: { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifierF] autorelease]; cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg-1.png"]]; //Only add content to cell if it is new if([cellIdentifierF isEqualToString: fourthCellIdentifier]) { textField.tag = 105; textField.text = reminderInstance.numDays; textField.inputView = self.reminderPicker; NSLog(@"Value = %@",textField.text); [cell.contentView addSubview:textField]; [self.fields addObject:textField]; } } } break; case 4: { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifierF] autorelease]; cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg-1.png"]]; //Only add content to cell if it is new if([cellIdentifierF isEqualToString: fifthCellIdentifier]) { checkboxButton = [[[UIButton alloc] initWithFrame:CGRectMake(16,1,120, 44)]autorelease]; [checkboxButton setImage:[UIImage imageNamed:@"ewee.png"] forState:UIControlStateNormal]; [checkboxButton addTarget:self action:@selector(toggleButton:) forControlEvents:UIControlEventTouchUpInside]; NSString *one = reminderInstance.selString; NSNumber* i = [NSNumber numberWithInt:[one intValue]]; BOOL isOn = [i boolValue]; if(isOn) { [checkboxButton setImage:[UIImage imageNamed:@"checkarrow.png"] forState:UIControlStateNormal]; } else { [checkboxButton setImage:[UIImage imageNamed:@"ewee.png"] forState:UIControlStateNormal]; } NSLog(@"String Val = %@",one); [checkboxButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; [checkboxButton setImageEdgeInsets:UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0)]; [cell addSubview:checkboxButton]; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(55, 10, 225, 24)]; label.text = @"Every Year"; label.textColor = [UIColor whiteColor]; label.backgroundColor = [UIColor clearColor]; [cell addSubview:label]; cell.textLabel.textColor = [UIColor whiteColor]; [label release]; } } } break; case 5: { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifierF] autorelease]; cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg-1.png"]]; //Only add content to cell if it is new if([cellIdentifierF isEqualToString: sixthCellIdentifier]) { textField.placeholder = @"Enter the number here"; [self.textField setValue:[UIColor purpleColor] forKeyPath:@"_placeholderLabel.textColor"]; textField.text = num; textField.text = reminderInstance.number; textField.tag = 106; textField.userInteractionEnabled = YES; textField.keyboardType = UIKeyboardTypeNumberPad; NSLog(@"Value = %@",textField.text); [cell.contentView addSubview:textField]; [self.fields addObject:textField]; } } } break; case 6: { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifierF] autorelease]; cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"reminderbuttonxl.png"]]; //Only add content to cell if it is new if([cellIdentifierF isEqualToString: seventhCellIdentifier]) { cell.backgroundColor = [UIColor clearColor]; textView.clipsToBounds = YES; textView = [[UITextView alloc]initWithFrame: CGRectMake(-2, -3, 307, 154)]; UIImageView *imgView = [[[UIImageView alloc]initWithFrame: textView.frame]autorelease]; imgView.image = [UIImage imageNamed: @"buttonbg_text.png"]; [textView addSubview: imgView]; [textView sendSubviewToBack: imgView]; textView.backgroundColor = [UIColor clearColor]; textView.delegate = self; textView.tag = 11; tagValues = textView.tag; textView.textColor = [UIColor purpleColor]; [cell.contentView addSubview:textView]; textView.text = @"Your birthday wishes/other reminder body here"; NSLog(@"Value = %@",textView.text); } } } break; case 7: { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifierF] autorelease]; cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg-1.png"]]; //Only add content to cell if it is new if([cellIdentifierF isEqualToString: eightCellIdentifier]) { textField.tag = 107; textField.inputView = self.groupPicker; tagValues = textField.tag; textField.text = reminderInstance.remGroup; NSLog(@"Value = %@",textField.text); [cell.contentView addSubview:textField]; [self.fields addObject:textField]; } } } break; default: break; } int size = [fields count]; NSLog(@"there are %d objects in the array", size); return cell; } </code></pre> <p>I have made several attempts to find out what exactly is going wrong also I checked some questions <a href="https://stackoverflow.com/questions/9091647/incorrect-number-of-objects-getting-added-to-mutable-array">here</a> and <a href="http://www.iphonedevsdk.com/forum/iphone-sdk-development/26567-uitableview-load-all-cells-before-user-scrolls-view-them.html" rel="nofollow noreferrer">there</a>.But couldn't find any efficient/appr. answer or that solves my issue.</p> <p>So anyone please help me with valuable suggestions or sample code snippets.</p> <p>Thanks all in advance :)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload