0

I am facing a strange problem. In a table view, I am having 3 sections out of which 1st section is having only labels and text fields. 2nd and 3rd section contains text fields and disclosure indicator on some cells of table.Say 2nd section is having 10 cells, then 3 contains disclosure indicator and other having text fields.

My problem is when I scroll the view up and downs, say 3-4 times, the disclosure indicator cells are shifted from there position and are placed on any location in that section. If I continue to scroll ahead, disclosure indicator are placed to there position again. If I remove those disclosure indicator and place only text fields all runs well.

I also tried using switch case in cellForRowAtIndexPath (as mentioned in following link), but nothing helping me out... :( http://www.iphonedevsdk.com/forum/iphone-sdk-development/13370-uitableview-cells-uilabel-problem.html

I did a lot google, but not able to find a solution for this.

Please help me in this...

Regards, VM

Vishal Mali
  • 71
  • 1
  • 8
  • I think this is a problem in your cellForRowAtIndexPath. So please post that code. – audience Aug 30 '10 at 08:38
  • Hi Rano and Audience. Did you find any problem in the code that I posted. I am still trying it hard to find a solution... :( – Vishal Mali Sep 01 '10 at 04:24
  • Sorry for the late comment. Idan is right. The if-block should only contain the initialization, not more code. – audience Sep 08 '10 at 09:30

2 Answers2

0

Please find the code for your reference.

First section contains 6 cells, 2nd section contains 12 and same with 3rd section. In 2nd and 3rd section cell no 4,8,9 contains disclosure indicators, other cells contains only text fields.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell;
NSInteger row = [indexPath row];NSLog(@"Row->%d",row);
NSInteger section = [indexPath section];NSLog(@"section->%d",section);
static NSString *CellIdentifier = @"Cell";
static NSString *BillingInfoCellIdentifier = @"BillingCell";
static NSString *DIBillingInfoCellIdentifier = @"DIBillingCell";
static NSString *BCellIdentifier = @"BCell";

switch (indexPath.section) {
    case 0:

cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 25)];
    cellLabel.tag = 56;
    cellLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [cell.contentView addSubview:cellLabel];
    [cellLabel release];

        switch (indexPath.row) {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5: 
                textField = [[UITextField alloc] initWithFrame: CGRectMake(105, 12, 200, 25)];
                textField.clearsOnBeginEditing = NO;
                textField.placeholder  = [[tempArray objectAtIndex:section] objectAtIndex:row];
                [textField setDelegate:self];
                [textField addTarget:self action:@selector(textFieldDone:) forControlEvents:UIControlEventEditingDidEndOnExit];
                textField.tag = 57;
                [cell.contentView addSubview:textField];NSLog(@"in adding text fields");
                break;
        }
        break;
    case 1:
        cell = [tableView dequeueReusableCellWithIdentifier:BillingInfoCellIdentifier];
        if (cell == nil) {

            switch (indexPath.row) {
                case 0:
                case 1:
                case 2:
                case 3:
                case 5: 
                case 6:
                case 7:
                case 10:
                case 11:
                    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:BillingInfoCellIdentifier] autorelease];
                    UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 25)];
                    cellLabel.tag = 56;
                    cellLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
                    [cell.contentView addSubview:cellLabel];
                    [cellLabel release];
                    cell.accessoryType = UITableViewCellAccessoryNone;
                    textField = [[UITextField alloc] initWithFrame: CGRectMake(105, 12, 200, 25)];
                    textField.clearsOnBeginEditing = NO;
                    textField.placeholder  = [[tempArray objectAtIndex:section] objectAtIndex:row];
                    [textField setDelegate:self];
                    [textField addTarget:self action:@selector(textFieldDone:) forControlEvents:UIControlEventEditingDidEndOnExit];
                    textField.tag = 57;
                    [cell.contentView addSubview:textField];NSLog(@"in adding text fields");
                    break;
                case 4:
                case 8:
                case 9:
                    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:BillingInfoCellIdentifier] autorelease];
                    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
                    cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 25)];
                    cellLabel.tag = 56;
                    cellLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
                    [cell.contentView addSubview:cellLabel];
                    [cellLabel release];
                    break;
            }
            break;

        }
        break;
    case 2:
        cell = [tableView dequeueReusableCellWithIdentifier:BCellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:BCellIdentifier] autorelease];
            UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 25)];
            cellLabel.tag = 56;
            cellLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
            [cell.contentView addSubview:cellLabel];
            [cellLabel release];
        }
    break;
}

}
UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:56];
UITextField *TF = (UITextField *)[cell.contentView viewWithTag:57];

switch (indexPath.section) {
    case 0:
        switch (indexPath.row) {
            case 0:
                cellLabel.text = @"First Name:";
                TF. placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 1:
                cellLabel.text = @"Last Name";//TF.text = @"Last Name:";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                NSLog(@"TF.placeholder 1->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
                break;
            case 2:
                cellLabel.text = @"eMail";//TF.text = @"email Name:";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                NSLog(@"TF.placeholder 2->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
                break;
            case 3:
                cellLabel.text = @"Password";//TF.text = @"pass Name:";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                NSLog(@"TF.placeholder 3->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
                break;
            case 4:
                cellLabel.text = @"Confirm";//TF.text = @"conform Name:";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                NSLog(@"TF.placeholder 4->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
                break;
            case 5:
                cellLabel.text = @"Phone";//TF.text = @"phone Name:";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                NSLog(@"TF.placeholder 5->%@",[[tempArray objectAtIndex:section] objectAtIndex:row]);
                break;
        }
        break;
    case 1:
        switch(indexPath.row) {
            case 0:
                cellLabel.text = @"First Name";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 1:
                cellLabel.text = @"Last Name";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 2:
                cellLabel.text = @"Phone";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 3:
                cellLabel.text = @"Company";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 5: 
                cellLabel.text = @"Address 1";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 6:
                cellLabel.text = @"Address 2";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 7:
                cellLabel.text = @"City";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 10:
                cellLabel.text = @"Suit";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            case 11:
                cellLabel.text = @"Zip";
                TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
            default:
                cellLabel.text = @"2 else ";
                //TF.placeholder = [[tempArray objectAtIndex:section] objectAtIndex:row];
                break;
        }
        break;
    case 2:
        switch (indexPath.row) {
            case 0:
                cellLabel.text = @"Label 2";
                break;
            case 1:
                cellLabel.text = @"Label 2";
                break;
            default:
                cellLabel.text = @"3.  else Label ";
                break;
        }
        break;
    default:
        break;
}
return cell;

}

Vishal Mali
  • 71
  • 1
  • 8
0

Try to do all the initialization after you allocate the cell , without conditioning if it was nil before.

Meaning :

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
 }

Now the rest of initialization of the cell (it's sub views and more)

Idan
  • 5,717
  • 10
  • 47
  • 84