2

我在堆栈中阅读了很多关于“dequeueReusableCellWithIdentifier”问题的内容,我尝试了几个答案,但似乎无法修复它。如果有人能在我的代码中找到问题所在,我将不胜感激

部分代码:

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 2;
}
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView   
{
return 10;
}



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

{

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)

{

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

}

if (indexPath.section == 0)   {

    if (indexPath.row == 0) {

        cell.textLabel.text = [arrayOfQuestion objectAtIndex:indexPath.section];

    }

    else if (indexPath.row == 1) {

        question1 = [[UITextField alloc] initWithFrame: CGRectMake(20, 3, 280, 38) ];

        question1.adjustsFontSizeToFitWidth = YES;

        question1.textColor = [UIColor blackColor];

        question1.font = [UIFont systemFontOfSize:17.0];

        question1.backgroundColor = [UIColor blueColor];

        question1.autocorrectionType = UITextAutocorrectionTypeNo;        // no auto correction support

        question1.autocapitalizationType = UITextAutocapitalizationTypeNone; // no auto capitalization support

        question1.textAlignment = UITextAlignmentRight;

        question1.keyboardType = UIKeyboardTypeDefault; // use the default type input method (entire keyboard)

        question1.returnKeyType = UIReturnKeyDone;

        question1.tag = 0;

//            question1.delegate = self;



        question1.clearButtonMode = UITextFieldViewModeUnlessEditing; // no clear 'x' button to the right



        [question1 setEnabled: YES ];

        [cell addSubview: question1 ];

    }

}

else if (indexPath.section == 1) {

    if (indexPath.row == 0) {

        cell.textLabel.text = [arrayOfQuestion objectAtIndex:indexPath.section];

    }

    else if (indexPath.row == 1) {

        question2 = [ [ UITextField alloc ] initWithFrame: CGRectMake(20, 3, 280, 38) ];

        question2.adjustsFontSizeToFitWidth = YES;

        question2.textColor = [UIColor blackColor];

        question2.font = [UIFont systemFontOfSize:17.0];

        question2.backgroundColor = [UIColor blueColor];

        question2.autocorrectionType = UITextAutocorrectionTypeNo;        // no auto correction support

        question2.autocapitalizationType = UITextAutocapitalizationTypeNone; // no auto capitalization support

        question2.textAlignment = UITextAlignmentRight;

        question2.keyboardType = UIKeyboardTypeDefault; // use the default type input method (entire keyboard)

        question2.returnKeyType = UIReturnKeyDone;

        question2.tag = 1;

        //            listTitleTextField.delegate = self;



        question2.clearButtonMode = UITextFieldViewModeUnlessEditing; // no clear 'x' button to the right



        [question2 setEnabled: YES ];

        [cell addSubview: question2 ];

    }

}

................

return cell;

}
4

1 回答 1

1

请记住dequeueReusableCellWithIdentifier一遍又一遍地重复使用相同的对象来绘制您的单元格。它比在表格视图中为未知数量的行创建新单元格更有效。这意味着当您在下次需要该单元格时添加 UITextFields[cell addSubview: ... ];时,它已经将该子视图添加到它的视图中。

你最好创建一个已经添加并作为属性访问的子UITableViewCellUITextField。然后你可以有两个单元格标识符:一个是指基本问题,UITableViewCell一个是指答案,这是你的新子类。

最重要的是,我会考虑通过重构您构建表格单元格的方式来使您的代码更加灵活。因为它的可扩展性不是很好,我敢打赌,试图获得答案是一场噩梦。

于 2013-04-09T21:02:01.903 回答