2012-06-26 3 views
0

Я пытался внедрить UILabel в ячейку, и то, что я получаю, является перекрытием некоторых значений, когда я просматриваю таблицу вверх и вниз несколько раз. Я работаю с ARC, поэтому я не хочу выпускать релиз, поэтому мой вопрос: каков правильный способ реализации Label в ячейке tableView?UILabel в Table View - правильный путь?

Here is how it looks

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

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


    } 
    // Configure the cell... 

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    cell.textLabel.textColor = [UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1]; 
    cell.textLabel.highlightedTextColor = [UIColor colorWithRed:0.753 green:0.651 blue:0.1569 alpha:1]; 


    UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0, cell.frame.size.width, cell.frame.size.height)]; 
    cellLabelS1.backgroundColor = [UIColor clearColor]; 
    cellLabelS1.font = [UIFont boldSystemFontOfSize:16]; 
    [cellLabelS1 setTextColor:[UIColor whiteColor]]; 


    [cellLabelS1 setText:temperatureString]; 
    temperatureString = nil; 
    [cell addSubview:cellLabelS1]; 
    [[cell imageView]setImage:[UIImage imageNamed:imageFromCodeDay1]]; 
    [[cell textLabel]setText:cityString]; 

    return cell; 

}

+1

The * лучший * способ будет создать пользовательский 'UITableViewCell' с Interface Builder. –

ответ

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

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

     UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0,cell.frame.size.width, cell.frame.size.height)]; 
cellLabelS1.backgroundColor = [UIColor clearColor]; 
cellLabelS1.tag = 200; 
cellLabelS1.font = [UIFont boldSystemFontOfSize:16]; 
[cellLabelS1 setTextColor:[UIColor whiteColor]]; 
[cell addSubview:cellLabelS1]; 
} 
// Configure the cell... 

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
cell.textLabel.textColor = [UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1]; 
cell.textLabel.highlightedTextColor = [UIColor colorWithRed:0.753 green:0.651 blue:0.1569 alpha:1]; 

UILabel *cellLabelS1 = (UILabel*)[cell viewWithTag:200]; 
[cellLabelS1 setText:temperatureString]; 
temperatureString = nil; 

[[cell imageView]setImage:[UIImage imageNamed:imageFromCodeDay1]]; 
[[cell textLabel]setText:cityString]; 

return cell; 
} 

может это поможет вам ....

2

Вы должны добавить метку к клетке, только если вы не имеете one.If вы повторно ячейки на втором проходе вы добавить его снова. Итак, мой совет - установить тег на ярлык и попытаться проверить, является ли элемент contentView басом уже меткой. Если не создать и добавить его.

  UILabel *myLabel = (UILabel *)[cell.contentView viewWithTag:2002]; 
      if(!myLabel){ 
       myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 22)]; 
       myLabel.tag = 2002; 
       [cell.contentView addSubview:myLabel]; 
      } 
      myLabel.text = @"my new text"; 
+0

Да, я не знал, что вы можете легко получить подзаголовки по тегу, что делает поиск метки, которую вы создали ранее, намного проще, чем я думал, что это будет –

0

Ваша проблема в этих строках:

UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0, cell.frame.size.width, cell.frame.size.height)]; 
cellLabelS1.backgroundColor = [UIColor clearColor]; 
cellLabelS1.font = [UIFont boldSystemFontOfSize:16]; 
[cellLabelS1 setTextColor:[UIColor whiteColor]]; 

Когда вы получаете повторно ячейку назад с точки зрения таблицы, это уже Хасс этот ярлык в нем. Что вы можете сделать, чтобы избежать добавления повторяющихся меток, добавьте его только в том случае, если вам нужно выделить новую ячейку. Тем не менее, это может затруднить извлечение метки из повторно используемой ячейки.

Я лично предложил бы создать пользовательский UITableViewCell в построителе интерфейсов и создать пользовательский подкласс UITableViewCell, обладающий свойством UILabel.

+0

, чтобы получить ярлык старой ячейки. , И если вы хотите создать пользовательский подклассу UITableViewCell и реализовать drawContentView и нарисовать все вручную, если вам нужна скорость прокрутки. –