метки в пользовательских ячейках перекрываются - PullRequest
0 голосов
/ 25 января 2012

Я настроил ячейку с четырьмя метками, изначально она выглядит хорошо, но когда я прокручиваю, а затем выбираю метки ячейки из другой строки, они перекрываются. вот мой код Любая помощь будет высоко оценена.

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier=@"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];

if (cell == nil) { cell = [[[UITableViewCell alloc]
                            initWithStyle:UITableViewCellStyleDefault 
                            reuseIdentifier: CellIdentifier] autorelease];
}
 NSString *cellIconName = [[self cellIcon] objectAtIndex:[indexPath row]];
cellImage=[UIImage imageNamed:cellIconName];

cell.imageView.image=cellImage;

UILabel *labelOne = [[UILabel alloc]initWithFrame:CGRectMake(65, 10, 140, 20)];
labelOne.text = [[NSString alloc]initWithFormat:@"%@",[dataList objectAtIndex:indexPath.row]];
[cell.contentView addSubview:labelOne];
[labelOne release];

UILabel *labelTwo = [[UILabel alloc]initWithFrame:CGRectMake(260, 10, 140, 20)];
labelTwo.text = [[NSString alloc]initWithFormat:@"%@",[newPrice objectAtIndex:indexPath.row]];
[cell.contentView addSubview:labelTwo];
[labelTwo release];



UILabel *label3 = [[UILabel alloc]initWithFrame:CGRectMake(65, 30, 140, 20)];
label3.text=[[NSString alloc]initWithFormat:@"%@",[details objectAtIndex:indexPath.row]];
[cell.contentView addSubview:label3];
[label3 release];


UILabel *label4 = [[UILabel alloc]initWithFrame:CGRectMake(260, 30, 140, 20)];
label4.text=[[NSString alloc]initWithFormat:@"%@",[oldPrice objectAtIndex:indexPath.row]];
[cell.contentView addSubview:label4];
[label4 release];

return cell;

}

Ответы [ 2 ]

4 голосов
/ 25 января 2012

Ошибка в том, что вы выделили метки в (остальной части) вне условия if if(cell==nil). Вы должны создавать метки только один раз, когда ячейка создается впервые.

Когда мы запускаем код, элемент управления проверяет, является ли ячейка нулевой или имеет какие-либо значения. Если мы размещаем метку в остальной части каждый раз (при прокрутке также), вы создаете новую метку каждый раз. Если мы выделяем его в условии if, метка выделяется только один раз для каждой ячейки, и мы просто обновляем текстовое значение при прокрутке.

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier=@"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];

if (cell == nil) 
{ 
cell = [[[UITableViewCell alloc]
                            initWithStyle:UITableViewCellStyleDefault 
                            reuseIdentifier: CellIdentifier] autorelease];

NSString *cellIconName = [[self cellIcon] objectAtIndex:[indexPath row]];
cellImage=[UIImage imageNamed:cellIconName];

cell.imageView.image=cellImage;

UILabel *labelOne = [[UILabel alloc]initWithFrame:CGRectMake(65, 10, 140, 20)];
labelOne.tag = 100;
[cell.contentView addSubview:labelOne];
[labelOne release];

UILabel *labelTwo = [[UILabel alloc]initWithFrame:CGRectMake(260, 10, 140, 20)];
labelTwo.tag = 101;
[cell.contentView addSubview:labelTwo];
[labelTwo release];

}

UILabel *labelOne = (UILabel *) [cell.contentView viewWithTag:100];
labelOne.text = [dataList objectAtIndex:indexPath.row];

UILabel *labelTwo = (UILabel *) [cell.contentView viewWithTag:101];
labelTwo.text = [newPrice objectAtIndex:indexPath.row];
 

return cell;
}
1 голос
/ 25 июля 2013

Вы также можете попробовать следующий фрагмент кода после

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

for (UIView * subView in [cell.contentView subviews])
{
 [subView removeFromSuperView];
}

Надеюсь, он вам поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...