2012-05-23 3 views
-1

Я новичок в разработке iPhone. Я разрабатываю приложение, которое содержит tableview с меткой внутри ячейки. Я поместил для каждой строки, как это, if(indexpath.row == 0) разную метку для каждой строки я сделал это. Но когда я прокручиваю таблицу, мой ярлык смешивается. Пожалуйста, помогите мне!Как управлять ярлыком ячейки таблицы?

static NSString *CellIdentifier = @"Cell"; 

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

if (indexPath.row == 2) 
{ 
    pendingListNumberLabel = [[UILabel alloc] init]; 
    pendingListNumberLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
    pendingListNumberLabel.textAlignment = UITextAlignmentLeft ; 
    pendingListNumberLabel.textColor = [UIColor orangeColor]; 
    pendingListNumberLabel.frame = CGRectMake(240, 6, 110, 30); 
    [pendingListNumberLabel setBackgroundColor:[UIColor clearColor]]; 
    [cell addSubview:pendingListNumberLabel]; 
} 

cell.textLabel.text = [affiliationsArray objectAtIndex:indexPath.row]; 
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
return cell; 
+4

пост ... ваш .... код! – borrrden

+0

немного больше объяснений и некоторый код wud помогают нам лучше помогать u. :) –

+0

Не видя кода, я бы предположил, что вы неправильно используете идентификатор повторного использования. –

ответ

0

Вы добавляете UILabel в качестве подзаголовка, то есть ошибку здесь. Обычно вы будете использовать пользовательские UITableViewCell для такого рода вещи, но быстро исправить это:

if (indexPath.row == 2) 
{ 
    pendingListNumberLabel = [[UILabel alloc] init]; 
    pendingListNumberLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
    pendingListNumberLabel.textAlignment = UITextAlignmentLeft ; 
    pendingListNumberLabel.textColor = [UIColor orangeColor]; 
    pendingListNumberLabel.frame = CGRectMake(240, 6, 110, 30); 
    [pendingListNumberLabel setBackgroundColor:[UIColor clearColor]]; 
    pendingListNumberLabel.tag = 1337 
    [cell addSubview:pendingListNumberLabel]; 
} else { 
    for (UIView * subView in [cell subviews]) { 
     if ([subView tag] == 1337) { 
      [subView removeFromSuperview]; 
     } 
    } 
} 
+0

спасибо, что это было полезно. – jone

-1

Для решения этой проблемы вы можете поставить cell=nil; перед проверкой cell== nil состояния или создать клетку каждый раз. Он будет работать, но это нехорошо Привычка.

Это также работает для текста

статический NSString * CellIdentifier = @ "Cell";

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];

cell = nil;

, если (ячейка == ноль)

{

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

}

, если (indexPath.row == 2) {

pendingListNumberLabel = [[UILabel alloc] init]; 

pendingListNumberLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 

pendingListNumberLabel.textAlignment = UITextAlignmentLeft ; 

pendingListNumberLabel.textColor = [UIColor orangeColor]; 

pendingListNumberLabel.frame = CGRectMake(240, 6, 110, 30); 

[pendingListNumberLabel setBackgroundColor:[UIColor clearColor]]; 
[cell addSubview:pendingListNumberLabel]; 

}

cell.textLabel.text = [affiliationsArray objectAtIndex: indexPath.row];

[cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];

обратная ячейка;

0

Это происходит потому, что вы используете многоразовые клетки, а не в правильном направлении ..

просто заменить код -

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

с этим -

UITableViewCell *cell = [[UITableViewCell alloc] init]; 

выше код может решить вашу проблему, но это плохо, если есть большое количество ячеек. В этом случае вы должны использовать повторно используемые ячейки.

+0

, да, он работал с этим кодом. Но я получаю текст ярлыка с сервера. Я написал код в viwedidload для веб-служб. теперь мой текст ярлыка не обновляется. – jone

0

В вашем методе tableView:cellForRowAtIndexPath:, сначала получить выбранную строку как этот

NSUInteger row = [indexPath row]; 

затем использовать «строку», чтобы захватить ваши данные из NSArray, что соответствует строкам Tableview и присвоить его текст собственности вашей ячейки TextLabel в как этот

NSString *string = [NSString stringWithFormat:@"%@",self.allItems objectAtIndex:row]; 
cell.textLabel.text = string; 
return cell; 

И, конечно, вы бы уже создали UITableViewCell с идентификатором повторного использования, как это:

static NSString *TableIdentifier = @"TableIdentifier"; 

UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:TableIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] 
      initWithStyle:UITableViewCellStyleValue1 
      reuseIdentifier:TableIdentifier]; 
} 

Ключ использует массив, который соответствует точно вашим строкам таблицы. (т. е. элемент 0 в массиве соответствует строке 0 в таблицеView), тогда вы не ошибетесь.

0
if (cell == nil) 
{ 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 
else 
     { 
      UILabel *titleLbl = (UILabel *)[cell viewWithTag:1]; 
      [titleLbl removeFromSuperview]; 
     } 

if (indexPath.row == 2) 
{ 
    pendingListNumberLabel = [[UILabel alloc] init]; 
    pendingListNumberLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
    pendingListNumberLabel.textAlignment = UITextAlignmentLeft ; 
    pendingListNumberLabel.textColor = [UIColor orangeColor]; 
    pendingListNumberLabel.tag = 1;// Write here..................................... 
    pendingListNumberLabel.frame = CGRectMake(240, 6, 110, 30); 
    [pendingListNumberLabel setBackgroundColor:[UIColor clearColor]]; 
    [cell addSubview:pendingListNumberLabel]; 
} 

cell.textLabel.text = [affiliationsArray objectAtIndex:indexPath.row]; 
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
return cell; 

Я думаю, это будет полезно для вас.

0

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

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
//if (cell == nil) // Need not this checking 
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

Используйте выделение клеток непосредственно, как описано выше :)

Смежные вопросы