Использование нескольких типов стилей ячеек и пользовательских ячеек в UITableView - PullRequest
6 голосов
/ 05 июля 2010

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

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

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

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

Ответы [ 4 ]

8 голосов
/ 05 июля 2010

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

Ключом к выполнению этой работы является наличие логической структуры в делегате табличного представления, который понимает, какая компоновка ячейки входит в какой раздел и какую строку. Оператор 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;
}

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

4 голосов
/ 05 июля 2010

Наиболее прямым подходом было бы изменить вашу реализацию -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
  }
}

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

1 голос
/ 28 марта 2015

Это элегантный способ сделать:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    /*
       Call a function to create all custom cells.
       Send the tableview and the indexPath to this function.
       So, your code will be clean and easy to read an maintenance =D
       DON'T forget to change the height of each cell
    */
    if (indexPath.row < 3)
        return [self createACustomCell1:tableView indexPath:indexPath];
    else
        return [self createACustomCell2:tableView indexPath:indexPath];

}


//*************
//  Create CUSTOM CELL 2
//*************
-(UITableViewCell *)createACustomCell1:(UITableView *)anTableView indexPath:(NSIndexPath *)indexPath{
    static NSString *CUSTOMCELL_1  = @"CUSTOMCELL_1";

    CustomCell_1 *cell = [anTableView dequeueReusableCellWithIdentifier:CUSTOMCELL_1];
    if (!cell){
    [anTableView registerNib:[UINib nibWithNibName:CUSTOMCELL_1
                                          bundle:nil] forCellReuseIdentifier:CUSTOMCELL_1];
        cell = [anTableView dequeueReusableCellWithIdentifier:CUSTOMCELL_1];
    }

    // Cell customization above 
    return cell;
}


//*************
//  Create CUSTOM CELL 2
//*************
-(UITableViewCell *)createACustomCell2:(UITableView *)anTableView indexPath:(NSIndexPath *)indexPath{
    static NSString *CUSTOMCELL_2  = @"CUSTOMCELL_2";

    CustomCell_2 *cell = [anTableView dequeueReusableCellWithIdentifier:CUSTOMCELL_2];
    if (!cell){
    [anTableView registerNib:[UINib nibWithNibName:CUSTOMCELL_2
                                          bundle:nil] forCellReuseIdentifier:CUSTOMCELL_2];
        cell = [anTableView dequeueReusableCellWithIdentifier:CUSTOMCELL_2];
    }

    // Cell customization above


    return cell;
}
0 голосов
/ 08 сентября 2010

Чтобы получить тот же эффект, что и для разделенной ячейки Tweetie, создайте пользовательскую ячейку, добавьте сегментированный элемент управления и создайте заголовки и метки сведений alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...