Дублирование метки ячейки UITableView - PullRequest
0 голосов
/ 30 марта 2012

У меня UINavigationController, полный UITableViews, и я использую пользовательские ячейки в одной из них.

В tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath Я добавляю UILabel с [cell addSubview:label];

Это прекрасно работает, однако, если я затем перейду в подробный вид, а затем вернусь назад, он дублирует метку. Как я могу это остановить?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 30 марта 2012

Проблема в том, что вы добавляете новую метку каждый раз, когда ячейка используется повторно и отображается снова.

Поскольку вы уже используете пользовательскую ячейку, самым простым решением было бы дать ячейке свойство UILabel и использовать ее вместо добавления новой метки каждый раз. В частности, вы должны добавлять новый ярлык, только если вы создаете ячейку, а не получаете переработанную. Или вы можете добавить новый UILabel, только если свойство имеет значение nil.

1 голос
/ 30 марта 2012

Или как альтернатива добавлению метки в пользовательский класс, просто убедитесь, что добавили метку внутри условного создания ячейки.например,

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:ident];

if(cell == nil){
   cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ident] autorelease]; 
   [cell.contentView addSubview:[[[UILabel alloc] init] autorelease]];   // <-------
}
0 голосов
/ 30 марта 2012

Добавьте тег к метке, затем проверьте, существует ли он

UILabel *label;    
if ([cell viewWithTag:2]){
    label = [cell viewWithTag:2];}
else{
    label = [[UILabel alloc]init];label.tag = 2;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...