Я разрабатываю приложение с использованием Xcode 4.6.1 для версии> iOS 5.0.Странное поведение в UITableView
Приложение просто отображает анкеты, которые были получены с серверной части, сохранены в базе данных и позволяют ее пользователям заполнять ее.
Чтобы показать вопросы, у меня есть UIScrollView
, и я использую его в pagingEnabled mode. У меня есть три типа типа выбора вопросов: checkbox
, radio button
и textfield
. Для элементов управления пользовательского интерфейса я создал классы CheckBoxButton
и RadioButton
, которые просто унаследованы от UIButton
. Я установил свойство выбора, изменив фоновое изображение. Поэтому каждая страница содержит вопрос и checkboxes | radio buttons
по выбору. Если количество выборки равно 4, оно отображает 4 флажка.
Если вопрос и варианты не помещаются на странице, я создаю UITableView
, и я добавляю его в UIScrollView
в качестве подзаголовка. Вместо использования UITableView
я попытался использовать UIScrollView
, но это еще хуже. Таким образом, это не вариант. Чтобы создать UITableViewCell
, я использую этот код.
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone ;
}
QuestionChoice *currentChoice = [[[[_questionArray objectAtIndex:currentQuestionIndex] choices] allObjects ] objectAtIndex:indexPath.row -1 ];
CheckBoxButton *checkBox = [[CheckBoxButton alloc] initWithXValue:20 yValue:0 tag:0];
[cell addSubview:checkBox];
UIFont *aeroSmall = [UIFont fontWithName:@"Aero" size:22.0f];
NSString *choiceText = currentChoice.choiceText;
CRTLabel *choiceLabel = [[CRTLabel alloc] initWithFrame:CGRectMake(80, 0, 700, 44) andText:choiceText font:aeroSmall tag:0];
[cell addSubview:choiceLabel];
Я знаю, что если на экране нет ячейки, ее не существует. Моя проблема в этом. Предположим, что я проверил четвертый флажок и прокручивал вверх, так что четвертая ячейка больше не отображается. Когда я прокручу вниз, четвертая ячейка собирается воссоздать, используя вышеприведенный код. Моя проблема заключается в том, что он создается со старым статусом. Это означает, что когда я проверил перед прокруткой вверх, он воссоздается в проверке.
Как это возможно? Что мне не хватает? Я не использовал механизм кэширования.
Если он не освобожден, скажем, четвертая ячейка в разделе 0 не отображается, почему я получаю нуль после метода cellForAtIndexPath, это нормально? – limon
Я не совсем понял вопрос в комментарии. Что имеет значение 'nil' и когда? – vacawama
, скажем, четвертая ячейка вне экрана. Когда я использую self.tableView cellForAtIndexPath: indexPath, для раздела 0 и строки 4, я получаю нуль. Но вы сказали, что ячейка, которая находится вне экрана, не освобождается. – limon