2014-11-12 4 views
0

У меня есть UITableView, созданный с помощью раскадровки, с типом ячейки, установленным в «Right Detail». Это правильно отображает как TextLabel и если detailTextLabel, и только если выполнено одно из следующих условий:Однострочный UITableView не показывает detailTextLabel до прокрутки

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

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

Мой код довольно простой. У меня есть массив, который я заполняю значениями textLabel/detailTextLabel с разделителями табуляции. Тогда, в моем Tableview: cellForRowAtIndexPath: функции, у меня есть следующий код:

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

    NSDictionary *itemDict=[scanArray objectAtIndex:indexPath.row]; 
    cell.detailTextLabel.text=[itemDict valueForKey:@"quantity"]; 
    cell.textLabel.text=[itemDict valueForKey:@"item"]; 

    [cell setNeedsLayout]; 
    [cell setNeedsDisplay]; 

    return cell; 
} 

Всякий раз, когда я внести изменения в объект ScanArray, я называю функцию reloadData на мой взгляд таблицы. Это, по-видимому, работает, потому что textLabel действительно отображается в представлении таблицы, однако, как уже упоминалось, detailTextLabel не (первоначально).

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

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

Редактировать 2: Таблица обновляется в ответ на кнопку, щелкнув пользователем. Пользователь вводит два значения (номер и количество позиций) и нажимает кнопку. Следующий код затем запустить:

NSDictionary *itemDict=[NSDictionary dictionaryWithObjectsAndKeys: 
           self.ItemCode.text,@"item", 
           self.Quantity.text,@"quantity", 
           returnedData,@"id", nil]; 

[scanArray insertObject:itemDict atIndex:0]; //The most recent item is always the first item in the list. 
[self.ItemCode setText:@""]; //clear out the entry fields 
[self.Quantity setText:@""]; 

[self.HistoryTable reloadData]; //reload the table view. 

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

+0

Если это всего лишь одна строка в вашем столе. Почему вы просто не задали текст, которым хотите его видеть? 'cell.detailTextLabel.text = @" whatever ";' – emotality

+0

@emotality, потому что это только одна строка, пока не будет добавлен другой элемент. Кроме того, я делаю именно то, что вы предлагаете, - я устанавливаю текст каждой ячейки в соответствии с тем, что я хочу, на основе содержимого массива. – ibrewster

+0

Проверьте, что я ответил, лучший способ сделать это. Вы просто добавляете 'NSDictionary' в' tableContent' для каждой ячейки, которую хотите добавить. – emotality

ответ

1

Одно из решений я обнаружил, что работает, чтобы заменить строку:

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"default"]; 

с:

UITableViewCell *cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"default"]; 

и удалить ячейку прототипа из раскадровки. Однако я прочитал, что это не лучшая практика.

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