UITableView разрыв, когда numberOfRowsInSection возвращает 0 - PullRequest
1 голос
/ 24 апреля 2011

Я создал редактируемый UITableView, который поддерживает несколько пользовательских UITableViewCells моего собственного дизайна. Всякий раз, когда пользователь создает новую запись или изменяет существующую запись, он использует этот UITableView. У меня табличное представление разбито на группы tableViewCells с использованием табличного представления сгруппированного стиля.

Когда пользователь редактирует запись, я не хочу отображать раздел 1. Чтобы добиться этого, я возвращаю 0, когда вызывается метод numberOfRowsInSection. Все работает хорошо, однако между разделом 0 и разделом 2 имеется «небольшой визуальный разрыв», который я хотел бы устранить, если это возможно. Я хочу избежать перекодирования контроллера табличного представления для динамической обработки indexPaths. Многие из моих indexPath (разделов и строк) жестко запрограммированы.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

printf("CustomEntryViewController, -tableView:numberOfRowsInSection:\n");

if (tableView == self.customEntryTableView) {

    if (section == 0) 

        return 1;

    else if (section == 1) {

        if ([self.entryMode isEqualToString:@"ADD"]) 
            return 2;
        else if ([self.entryMode isEqualToString:@"EDIT"])
            return 0;

    }
    else if (section == 2)

        return 1;

    else if (section == 3)

        return 1;

    else if (section == 4 && self.uisegQuantityAnswer.selectedSegmentIndex == 0) 

        return 1;

}

return 0;
}

Заранее спасибо.

1 Ответ

1 голос
/ 25 апреля 2011

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

- (NSIndexPath *)virtualIndexPath:(NSIndexPath *)indexPath {

    return [NSIndexPath indexPathForRow:indexPath.row inSection:[self virtualSection:indexPath.section]]; 

}


- (NSUInteger)virtualSection:(NSUInteger)section {

    NSUInteger virtualSection;

    if ([self.entryMode isEqualToString:@"ADD"])

        virtualSection = section;

    else if ([self.entryMode isEqualToString:@"EDIT"]) {

        if (section == 0) 
            virtualSection = section;

        else if (section > 0)
            virtualSection = section + 1;

    }

    return virtualSection;

}

Затем я вызываю один из вышеперечисленных методов в остальной части приложения.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSUInteger virtualSection = [self virtualSection:section];

    if (tableView == self.customEntryTableView) {

        if (virtualSection == 0) {

// Additional code....

В дополнение к этому я также изменил -tableView: numberOfSectionsInTableView: метод, чтобы возвращать правильное количество секций на ADD и режим EDIT.

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

...