Развернуть и свернуть статическое табличное представление - PullRequest
1 голос
/ 21 марта 2012

У меня есть статическое табличное представление в моем приложении. Это табличное представление используется для предпочтений. Раздел в табличном представлении имеет только одну ячейку, которая содержит UISwitch. Когда этот переключатель активирован, я хочу показать раздел внизу, а когда нет, я хочу скрыть раздел внизу. Все разделы (также те, которые должны быть скрыты / показаны) настраиваются с помощью Interface Builder.

Есть ли способ скрыть или показать этот раздел, когда табличное представление статично, так как статическое табличное представление не имеет источника данных? Если это будет проще, я мог бы также согласиться использовать тот же раздел, но добавлять / скрывать строки из этого раздела, когда переключатель включен или выключен.

EDIT

Я подошел ближе, как это сделать.

Устанавливая высоту ячеек в разделе и высоту нижнего колонтитула и заголовка раздела равным 0, я могу почти скрыть раздел. У меня все еще есть некоторый промежуток между разделом выше и разделом ниже, от которого я не могу понять, как избавиться. У кого-нибудь есть идея, откуда взялся этот дополнительный интервал? Смотрите фото ниже.

Это код, который я использую для почти скрытия раздела.

/* Will display cell */
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 2)
        cell.hidden = YES;
    else
        cell.hidden = NO;
}

/* Height of cell */
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 2)
        return 0;

    return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}

/* Height of section header */
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 2)
        return 0;

    return [super tableView:tableView heightForHeaderInSection:section];
}

/* Height of section footer */
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (section == 2)
        return 0;

    return [super tableView:tableView heightForFooterInSection:section];
}

Вот так выглядит табличное представление. Есть еще место, которое мне нужно спрятать. Дополнительный пробел находится между разделами, обозначенными «Arbejde» и «Anden».

Extra space

Ответы [ 4 ]

1 голос
/ 21 марта 2012

Я получил его с помощью кода в вопросе.Просто установите высоту 1.0f вместо 0.Кажется, что высота действует только тогда, когда ее значение больше нуля.

Уменьшение расстояния между разделами UITableView.

0 голосов
/ 28 января 2019

Для статических ячеек я просто использую это:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  let cell = self.tableView(self.tableView, cellForRowAt: indexPath)
  if cell.isHidden {
    return 0
  } else {
    return cell.bounds.size.height
  }
}
0 голосов
/ 28 октября 2014

Для статических ячеек Я также не нашел достойных ответов. Если вы хотите удалить разделы или расширить ячейку, то это код, который я использовал.

Создайте значение BOOL в вашем .m

@interface yourClassName (){


BOOL ddMenuButtonPressed;

}

@end

ddMenu означает drop down menu.

Затем я установил значение bool в false в методе viewDidLoad.

ddMenuButtonPressed = false;

Затем я инициализирую ddButton (в элементе управления раскадровкой + перетащите с вашей кнопки или переключитесь на файл .h и создайте действие и задайте имя ddMenuButton) и используйте этот метод в моем файле .m.

- (IBAction)ddMenuShow:(UIButton *)sender
{
     if (sender.tag == 0) {    
        sender.tag = 1;
        ddMenuButtonPressed = true;

    } else {
        sender.tag = 0;
        ddMenuButtonPressed = false;

    }
    //very important that you include these
    //they update the view like a viewDidLoad statement without leaving the screen
    //if you have any data entry points in your cell like a textfield it **will not** erase that data fortunately
    [self.tableView beginUpdates];
    [self.tableView endUpdates];

}

Наконец, мы добавляем следующий метод:

// Handle expanding and minimising cell or section

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //if the section is 0 (and there is only one cell) and ddMenuButtonPressed hasn't been pressed
    if (indexPath.section == 0 && ddMenuButtonPressed == false){

    //return the height you have it set as in story board (or a number)
    return [super tableView:tableView heightForRowAtIndexPath:indexPath];

    }
    //if the section is 0 and the ddMenuButton has been pressed
    if (indexPath.section == 0 && ddMenuButtonPressed == true){
    //change the cell height to 380 or whatever size you want
    return 380;
    }
    //otherwise leave cells as they are
    else {

    return [super tableView:tableView heightForRowAtIndexPath:indexPath];

    }
}

И это все. Никакого сложного кодирования, красивого и чистого (без комментариев) и простого, и вы можете использовать его снова и снова для любого количества разделов.

0 голосов
/ 21 марта 2012

см. Этот учебник, это может вам помочь www.cocoanetics.com / 2011/03 / expandingcollapsing-tableview-section /

...