Используя несколько типов стиля ячеек и пользовательских ячеек в UITableView

У меня есть проблемы при выяснении, как отобразить различные стили ячеек, а также пользовательские ячейки вместе в UITableView. Я понимаю, как настроить и соединить ячейки и конструкцию основного UITableView, но просто не как к ячейке "смешивания и подгонки" в одной.

Лучший пример я могу показать Вам на том, чего я пытаюсь достигнуть, с приложением Tweetie 2. Tweetie 2 profile

Вершина сегмента там является абзацем блока, затем ниже его там UITableViewCell с набором стиля UITableViewCellStyleValue2. Как точно я пошел бы о достижении этого эффекта?

Спасибо заранее

6
задан Community 8 February 2017 в 14:27
поделиться

2 ответа

Основной макет - это сгруппированная таблица. Каждый кластер ячеек представляет собой раздел таблицы. Самая верхняя ячейка имеет прозрачный фон.

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

Итак, в tableView: cellForRowAtIndexPath: у вас будет что-то вроде:

switch (indexPath.section) {
    case 0:
        cell= //configure cell with transparent background
        break;
    case 1:
        if (indexPath.row==0) {
            cell = // configure cell for multiline
        }else {
            cell = // configure for UITableViewCellStyleValue2
        }
        break;
    case 2:
        // .. and so on for each section and cell
        break;
    default:
        break;
}

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

8
ответ дан 8 December 2019 в 18:32
поделиться

Самым прямым подходом было бы изменить вашу реализацию -tableView: cellForRowAtIndexPath: , чтобы использовать indexPath.section и indexPath.row , чтобы определить, какой тип ячейки рисовать. Например:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  if (indexPath.section == 0) {
    if (indexPath.row == 0) {
      // return long text style cell

    } else {
      // return left/right label style cell
    }

  } else {
     // return the 4-way button style cell
  }
}

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

4
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: