0

我面临一个奇怪的问题。在表格视图中,我有 3 个部分,其中第一个部分只有标签和文本字段。第 2 和第 3 部分在表格的某些单元格上包含文本字段和披露指示符。假设第 2 部分有 10 个单元格,那么第 3 部分包含披露指示符和其他有文本字段。

我的问题是当我上下滚动视图时,比如 3-4 次,披露指示单元格从那里移动并放置在该部分的任何位置。如果我继续向前滚动,披露指示器将再次放置到该位置。如果我删除那些披露指示器并仅放置文本字段,所有运行良好。

我也尝试在 cellForRowAtIndexPath 中使用 switch case(如以下链接所述),但没有任何帮助... :( http://www.iphonedevsdk.com/forum/iphone-sdk-development/13370-uitableview-cells- uilabel-problem.html

我做了很多谷歌,但无法找到解决方案。

请在这方面帮助我...

问候, VM

4

2 回答 2

0

尝试在分配单元后进行所有初始化,如果之前为 nil,则无需调节。

意义 :

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

现在单元格的其余初始化(它是子视图等等)

于 2010-08-30T09:56:44.607 回答
0

请找到代码供您参考。

第一部分包含 6 个单元格,第二部分包含 12 个,与第三部分相同。在第 2 和第 3 部分中,第 4、8、9 号单元格包含披露指示符,其他单元格仅包含文本字段。

- (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;

}

于 2010-08-30T08:41:06.140 回答