возможно ли иметь 2 UICollectionView под одним контроллером и переключаться между ними?

Вчера я разместил этот вопрос: https://stackoverflow.com/questions/23119494/what-is-the-best-way-to-dynamically-change-the-style-of-a-uicollectionview и получил 0 ответов.

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

Стиль сетки по умолчанию:

введите здесь описание изображения

После нажатия на левый сегмент кнопки отображается представление одного элемента:

введите здесь описание изображения

У меня есть готовый метод, который реагирует на касание каждого сегмента. Теперь я скрываю collectionView при нажатии на элемент управления сегментом и показываю его при повторном нажатии.:

- (void)displayTypeSegmentSelected
{
    _selectedDisplayTypeIndex = [_displayTypeControl selectedSegmentIndex];

    if (_selectedDisplayTypeIndex == 0) {
        NSLog(@"Single file item view selected");
        [_collectionView setHidden:YES];
    } else {
        NSLog(@"Grid style view selected");
        [_collectionView setHidden:NO];
    }
}

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

Возможные решения:

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

Можно ли это сделать в конструкторе интерфейсов? Если да, то как мне это сделать?

Можно ли это сделать программно? Если да, то как мне это сделать?

Мне было интересно, следует ли изначально создавать оба объекта collectionView, а не по умолчанию в начале, и один файл только при нажатии на segmentControl.

Буду признателен за некоторые примеры или четкое объяснение. Весь день безуспешно изучал, как это сделать.

С уважением


person LondonGuy    schedule 17.04.2014    source источник
comment
Вы успешно внедрили? Привет, могу ли я получить пример реализации для этого: Github будет работать для новых новичков, таких как я :(   -  person Femina    schedule 13.05.2014


Ответы (2)


Это возможно с двумя контроллерами представления и переключением их положения в стеке навигации.

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

person Hermann Klecker    schedule 17.04.2014
comment
Как мне добавить второй collectionView? Можно в ИБ? или это должно быть программно? - person LondonGuy; 18.04.2014
comment
Можно в ИБ за перетаскивание. Программно вы можете использовать self.secondView = [[UIView alloc] initWithFrame:self.view.frame]; в viewDidLoad. Однако в большинстве случаев использование границ безопаснее, чем фрейм. Вот это должно сработать. - person Hermann Klecker; 18.04.2014
comment
Привет, могу ли я получить какой-либо образец реализации для этого: Github будет работать для новых новичков, таких как я. - person Femina; 13.05.2014
comment
@Meenu, боюсь, у меня их нет. Честно говоря, я никогда не делал этого сам. Тем не менее, это очень просто. У вас есть один контроллер представления с одним базовым представлением, само представление self.view. Затем вы используете либо IB (редактор раскадровки) для создания view1 и view2, либо создаете их программно. Но создайте свойства в своем контроллере представления и установите/подключите их, чтобы вы могли обращаться к ним с помощью self.view1 и self.view2. Оба имеют тот же кадр, что и self.view, что означает покрытие всего доступного экрана. (продолжение...) - person Hermann Klecker; 13.05.2014
comment
... (продолжение) Создайте подвид self.view1 для self.view и создайте подвид self.view2 для self.view2. ИЛИ сделайте оба подвида self.view, но сначала добавьте self.view1. Теперь self.view2 виден. И виден только self.view2. Теперь вместо переключения между представлениями просто скройте self.view2. [self.view2 setHidden = YES] А позже, когда потребуется, снова отобразить. Действительно, это так просто. - person Hermann Klecker; 13.05.2014
comment
Я пытаюсь это сделать около 2 дней, так как мне нужно загружать чертову кучу изображений с высоким разрешением, прокручивать изображения, добавлять изображения, метки, сохранять два представления (хотя и скрыто) и т. д., потребляя больше памяти. поэтому приходит предупреждение о памяти. Кроме того, как сохранить общий индекс прокрутки для обоих представлений? Я не использую представление таблицы, представление коллекции. Просто просмотр и добавление в прокрутку. - person Femina; 13.05.2014

Вы можете использовать то же представление коллекции, но только изменить источник данных и делегировать.

person quaertym    schedule 17.04.2014