У меня есть проблемы при выяснении, как отобразить различные стили ячеек, а также пользовательские ячейки вместе в UITableView. Я понимаю, как настроить и соединить ячейки и конструкцию основного UITableView, но просто не как к ячейке "смешивания и подгонки" в одной.
Лучший пример я могу показать Вам на том, чего я пытаюсь достигнуть, с приложением Tweetie 2.
Вершина сегмента там является абзацем блока, затем ниже его там UITableViewCell с набором стиля UITableViewCellStyleValue2. Как точно я пошел бы о достижении этого эффекта?
Спасибо заранее
Основной макет - это сгруппированная таблица. Каждый кластер ячеек представляет собой раздел таблицы. Самая верхняя ячейка имеет прозрачный фон.
Ключом к выполнению этой работы является наличие логической структуры в делегате 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;
}
В этом макете табличное представление используется не как логическая таблица (которая отображает повторяющиеся единицы структурированных данных списка) и подробнее как удобный механизм управления макетом. Логика управления табличным представлением должна быть более сложной и отражать потребности макета.
Самым прямым подходом было бы изменить вашу реализацию -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
}
}
В зависимости от того, сколько ячеек вы визуализируете и сколько у вас стилей ячеек, вам может потребоваться повторно использовать ячейки, и в этом случае вам следует использовать разные идентификаторы ячейки для каждого стиля ячейки.