it-roy-ru.com

В UITableView cell.detailTextLabel.text не работает ... почему?

В tableView:cellForRowAtIndexPath: у меня есть следующее:

cell.textLabel.text = @"label";
cell.detailTextLabel.text = @"detail";

textLabel отображается, как и ожидалось, но detailTextLabel не отображается вообще, хотя диагностики нет. Я ожидал, что «подробный» текст появится в ячейке во второй строке, ниже «обычного» текста, возможно, с меньшим размером шрифта.

Тот же вопрос задается в другой публикации здесь, и пользователь "jbrennan" ответил, что стиль ячейки таблицы должен быть чем-то отличным от UITableViewCellStylePlain. Однако, кажется, что есть только два возможных стиля: UITableViewCellStylePlain и UITableViewCellStyleGrouped. Я получаю тот же результат с любым (метка детализации не отображается).

Есть ли другой стиль ячеек, который я не вижу в документации? Изменилось ли UITableView в последнем обновлении и detailTextLabel больше не доступен? Должен ли я сделать что-то дополнительное, чтобы это появилось? Какие-либо предложения?

Я использую xcode 3.2.5 и собираю для iPhone 4.2 Simulator.

41
RobertL

Ваша инициализация должна быть изменена на это: 

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

Я подчеркнул и выделил ту часть, которую нужно изменить. 

115
Aurum Aquila

Вам нужно установить тип ячейки на Subtitle, когда вы его выделите. 

if (!cell) {
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:BasicCellIdentifier];
}
14
W Dyson

При использовании Xcode 4.2, установите стиль ячейки табличного представления в Subtitle в раскадровке. dequeueReusableCellWithIdentifier вернет инстанцированную ячейку.

12
oragorn

Установите для таблицы View Cell Style значение Subtitle в раскадровке. 

и напишите этот код, чтобы настроить ячейку 

if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:BasicCellIdentifier] autorelease];
}

enter image description here

4
Mohammad Shaker
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                           reuseIdentifier:CellIdentifier];
3
user2964955

Swift 3:

Если вы делаете свою ячейку с переопределением функции "cellForRowAt indexPath":

let tableContent = ["1", "2", "3", "4", "5"]
let tableDetailContent = ["a", "b", "c", "d", ""]

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "yourCellIdentifier")
    cell.textLabel?.text = tableContent[indexPath.row]
    cell.detailTextLabel?.text = tableDetailContent[indexPath.row]

    return cell
}

 enter image description here

Эта часть кода сверху позволяет вам установить ваш detailTextLabel. Вы можете установить все, что захотите на раскадровке для стиля ячейки табличного представления (Пользовательский, Основной, Правый, Левый, Субтитр), эта строка будет переопределять его:

style: UITableViewCellStyle.subtitle
1
balazs630

Для Swift 4, хотя техника будет той же самой версии (или Obj-C) -

Я знаю, что немного поздно для вечеринки, но многие ответы делают это намного сложнее, чем нужно. 

Предполагая, что вы используете раскадровку, все, что вам нужно сделать, это установить стиль ячейки табличного представления в раскадровке на «Субтитры», а затем просто -

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myIdentifier", for: indexPath)

    cell.textLabel?.text = "Title"
    cell.detailTextLabel?.text = "Subtitle..."

    return cell
}

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

1
SomaMan
  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier: CellIdentifier];
0
BrandonYum