2012-06-14 2 views
3
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell2"; 
    UILabel *titleLabel; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(5, 5, 300, 20)]; 
     [cell.contentView addSubview:titleLabel]; 
     titleLabel.tag = 0011; 
    } 
    else 
    { 
     titleLabel = (UILabel *)[cell.contentView viewWithTag:0011]; 
    } 

    // Configure the cell... 
    NSMutableString *title = [NSMutableString stringWithString:@"Customer: "]; 
    [title appendString:[titles objectAtIndex:indexPath.row]]; 
    titleLabel.text = title.copy; 
    titleLabel.backgroundColor = [UIColor clearColor]; 
    titleLabel.textAlignment = UITextAlignmentLeft; 
    titleLabel.font = [UIFont systemFontOfSize:18.0]; 

Моя ячейка никогда не является ничем, и моя заголовокLabel из-за этого никогда не выделяется, хотя мои ячейки сгенерированы. Я не вижу, как это возможно. Состояние if никогда не является истинным, что должно быть для ячеек, которые генерируются в первый раз, но мои ячейки создаются так, как они должны быть, без моего titleLabel'sПроблема с распределением UITableViewCell - ячейка не равна нулю

+0

Можете ли вы сказать мне, почему ваша клетка никогда не ноль? – Siam

+0

Если у вас прототип ячейки в раскадровке, ячейка никогда не будет нулевой. – Philip007

ответ

5

Звучит так, как будто вы используете iOS 5 (или позже) и Раскадровки.

Под iOS 5 (или более поздней версией), если вы используете Storyboards и TableView Controller, гарантированно возвратит элемент dequeueReusableCellWithIdentifier: (при условии, что вы определили ячейку с данным идентификатором в раскадровке).

Если это так, решение состоит в том, чтобы полностью создать пользовательскую ячейку таблицы в раскадровке. Перейдите к своему столу в своей раскадровке, выберите Content:Dynamic Prototypes и сделайте Prototype Cells:1. Теперь макет вашей ячейки графически будет именно тем, что вы хотите. Теперь нажмите на ячейку и установите Identifier:Cell2. Теперь вам не нужно создавать метку во время выполнения или проверить, нет ли она. Полная информация, в том числе о том, как ссылаться на метки, которые вы установили, находится в примечаниях к выпуску iOS 5 (ссылка ниже) или во многих учебниках в Интернете.

Смотрите раздел Информация о выпуске IOS 5 Configuring Table Views

+0

если это так, мне нужно проверить, создан ли textLabel, поэтому я бы только изменил значения в нем. Как мне добиться этого в таком случае? – Bartu

+0

Я бы не хотел отключать функцию повторного использования, но для такого использования я не вижу способа реализовать свою собственную пользовательскую ячейку. Если мне нужно отключить очередь повторного использования, моя таблица будет выглядеть нормально, но если я включу повторное использование и не проверю создание ячейки или существование, мой ярлык заголовка и другие ярлыки будут создаваться друг над другом. Не знаю, что делать ... – Bartu

+1

@Bartu Если вы используете раскадровки, создайте и пометьте свои представления в прототипе. Они будут там, когда ячейка будет возвращена. В противном случае используйте собственный класс подклассов и добавьте новые виды в awakeFromNib. – jrturton

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