#iphone #objective-c #uitableview
#iPhone #objective-c #uitableview
Вопрос:
Я создал сгруппированное табличное представление, подобное изображению ниже. но данные в строке таблицы появляются и исчезают, когда мы прокручиваем страницу вверх (или) прокручиваем страницу вниз, при прокрутке вверх первые 2 строки будут подниматься (за пределы просмотра), тогда, если мы прокручиваем вниз, обе строки будут принимать одинаковое значение,, y это так? кто-нибудь может мне помочь
Заранее спасибо.
как и в следующем коде, я создаю ячейку таблицы, где CustomCellStudentData
находится класс, я создаю фреймы типа ярлыков, фреймы текстового поля
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CustomCellStudentData *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomCellStudentData alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
switch(indexPath.section)
{
case 0:
switch (indexPath.row)
{
case 0:
{
tfText[0] = [[UITextField alloc] initWithFrame:CGRectMake(100,10, 200, 40)];
cell.accessoryView = tfText[0];
tfText[0].delegate=self;
tfText[0].placeholder =@"<Student Name>";
cell.primaryLabel.text =@"Student Name: ";
}
break;
case 1:
{
tfText[1] = [[UITextField alloc] initWithFrame:CGRectMake(100,10, 200, 40)];
cell.accessoryView = tfText[1];
tfText[1].delegate=self;
tfText[1].placeholder =@"<Student Age>";
cell.primaryLabel.text =@"Student Age: ";
}
}
}
Ответ №1:
UITableView
повторно использует ячейки, чтобы не забивать память. Как только две ячейки поднимаются вверх, они попадают в пул повторно используемых ячеек. Если пул не пуст, dequeueReusableCellWithIdentifier:
возвращает ячейку из этого пула (здесь есть зависимость от идентификатора). Поскольку для просмотра таблицы требуются ячейки для новых прокручиваемых строк, она получает ячейки из пула и предоставляет их вам для перенастройки. Итак, текстовое поле, которое вы прикрепили к ячейке при настройке его для строк 0 и 1, все еще остается, если вы явно не удалите. Поскольку мы не знаем, какие ячейки мы собираемся получить, мы должны сбросить все настройки, которые мы делаем, и настроить ее как новую ячейку. В этом случае, независимо от того, какая ячейка поступает, сначала вам следует удалить текстовое поле как вспомогательный вид.
Ответ №2:
cell = [[[CustomCellStudentData alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
Ответ №3:
То, что сказал Дипак, верно. Добавляю к его ответу, в будущем, если вы добавите какой-либо подвид в представление ячейки. Удалите из ячейки, прежде чем добавлять в нее что-либо. Используйте
for(UIView * view in cell.contentView.subviews){
[view removeFromSuperview]; view = nil;
}
перед настройкой ячейки.
И да, пожалуйста, увеличьте скорость принятия. Возвращение к вопросам, которые вы задавали ранее, и принятие некоторых ответов должно помочь.