У меня есть макет потока представления коллекции, добавленный как подпредставление внутри сегментированного элемента управления. Сегмент подразделяется на 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];
        }
    }

} 
0
BharathRao 30 Май 2019 в 15:39

2 ответа

Лучший ответ

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

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

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

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

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

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

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

0
BharathRao 30 Май 2019 в 13:59

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

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

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

0
Van 31 Май 2019 в 07:27