Как сохранить состояние CollectionView для разных сегментов (вкладка) - PullRequest
0 голосов
/ 30 мая 2019

У меня есть макет потока представления коллекции, добавленный как подпредставление внутри сегментированного элемента управления. Сегмент относится к категории All, New, Used. Моя проблема в том, как мне сохранить состояние представления коллекции для разных сегментов.

Я делаю вызовы API для загрузки данных на All, New, Used сегменты

Кроме того, каждый раз, когда я переключаю вкладку, я звоню [collectionView reloadData], который перезагружает представление сбора, но не совсем ту позицию, где я оставил ранее в этом конкретном сегменте

Например, в All Сегменте я прокрутил 10 - 15 предметов, затем я переключаюсь на New Сегмент и прокручиваю 3 предмета, и теперь, если я снова переключу вкладку на All Сегмент, то положение All Сегмент также идет на 3-ю позицию

Как это можно решить. Спасибо за терпеливое чтение. Любая помощь мне очень поможет.

Вот пример кода, который я использую для переключения сегмента

-(IBAction)changeSeg:(id)sender{
    [collectionView reloadData];

    if(segmentedControl.selectedSegmentIndex == 0){
atScrollPosition:UICollectionViewScrollPositionNone animated:false];
        typeFlag = 0;
        if ([inventoryDetails count] == 0 && totalInventoryCountForAll != 0) {
            [self loadMore];
        } else if (totalInventoryCountForAll == 0) {
            [self setNoCarVisibility: true];
        }
    }
    else if(segmentedControl.selectedSegmentIndex == 1){
        typeFlag = 1;
        if ([newInventory count] == 0 && totalInventoryCountForNew != 0) {
            [self loadMore];
        } else if (totalInventoryCountForNew == 0) {
            [self setNoCarVisibility: true];
        }
    }
    else if(segmentedControl.selectedSegmentIndex == 2){
        typeFlag = 2;
        if([usedInventory count] == 0 && totalInventoryCountForUsed != 0){
            [self loadMore];
        } else if (totalInventoryCountForUsed == 0) {
            [self setNoCarVisibility: true];
        }
    }

} 

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Итак, наконец-то я получил быстрое решение следующим образом:

1).Я создал три вида коллекции для всех, новые, использованные

2).Созданы требуемые выходное соединение, источник данных и делегаты для всех трех представлений коллекции

3).Хитрость заключается в том, чтобы скрыть и показать представление коллекции для текущего выбранного сегмента.

4).Но здесь я столкнулся с небольшой проблемой.Первое представление коллекции (в моем случае вкладка «Все») должно быть последним элементом в Интерфейсном конструкторе, тогда только оно будет отображаться при начальной загрузке представления коллекции.

5).Всякий раз, когда я переключаю вкладки, я скрываю два других вида коллекции и показываю вид коллекции выбранной вкладки.

Это может быть неправильным решением.Но пока я это делал.

0 голосов
/ 30 мая 2019

Может быть, вы можете сохранить indexpath текущей видимой ячейки при переключении вкладки scrolltoIndepath после reloadData. Надеюсь, это поможет ....

Редактировать Текущий индексный путь для каждой из 3 вкладок в отдельности. Таким образом, не будет одной переменной, вместо этого будет 3 переменные indexpath, индивидуальные для каждой вкладки, после того, как вкладка переключена, управляйте значениями в соответствующей переменной и затем пересчитываете таким же образом.

Например, currentAllIndexpath, currentNewIndexpath и т. Д.

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