У меня есть 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.
Если это всего лишь одна строка в вашем столе. Почему вы просто не задали текст, которым хотите его видеть? 'cell.detailTextLabel.text = @" whatever ";' – emotality
@emotality, потому что это только одна строка, пока не будет добавлен другой элемент. Кроме того, я делаю именно то, что вы предлагаете, - я устанавливаю текст каждой ячейки в соответствии с тем, что я хочу, на основе содержимого массива. – ibrewster
Проверьте, что я ответил, лучший способ сделать это. Вы просто добавляете 'NSDictionary' в' tableContent' для каждой ячейки, которую хотите добавить. – emotality