2017-01-03 5 views
0

Я перешел на новый контроллер просмотра. Этот контроллер просмотра содержит данные массива из соответствующего CollectionViewCell. Как изменить данные для представления предыдущего массива ячеек? Без необходимости возвращаться к последнему контроллеру просмотра и выбирать ячейку оттуда? Я использую Swift 3 Ниже приведено изображение, которое объясняет, что я имею в видуНайти indexPath в ViewController

Первое изображение находится в первом контроллере просмотра. Второе и третье изображения - это то, что отображается при прослушивании одного из первых двух в списке. Вы можете перейти к следующему индексу, используя клавиши со стрелками во втором контроллере просмотра. Как достичь этой функциональности?

let dataSource = DataSource() 

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
return 1 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    if inSearchMode { 
     return filteredAnimal.count 
    } 

    return dataSource.anim.filter{ $0.isDefault! }.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AnimIndex", for: indexPath as IndexPath) as! AnimIndex 


    let animal: Animal 

    if inSearchMode { 
     animal = filteredAnimal[indexPath.row] 
    } else { 
     animal = dataSource.anim.filter{ $0.isDefault! }[indexPath.row] 
    } 

    cell.configureCell(animal) 

    return cell 
} 
+0

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

+0

в соответствии с моим пониманием, я думаю, вам нужно передать все данные cellview cell на следующий контроллер представления, чтобы теперь у вас были все данные, поэтому вам нужно выбрать следующие или предыдущие данные индекса. –

+0

Обновлено сообщение с дополнительной информацией – user4938361

ответ

1

Это очень общий шаблон пользовательского интерфейса. Вы должны выполнить поиск по мастеру/детали. Вы должны найти множество примеров проектов, которые приведут примеры этого шаблона пользовательского интерфейса.

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

Этот объект модели должен быть доступен для всех контроллеров представлений, которые должны отображать информацию от него. Вы можете либо передать ссылку на объект модели, либо сделать его одиночным. Есть преимущества для любого подхода.

Для коллекций и видов таблиц, которые организованы секцией и строкой, массив массивов объектов данных часто является хорошей структурой для вашей модели. Если ваши данные находятся в одном разделе, вы можете использовать один массив.

Когда пользователь нажимает на ячейку в вашем первом контроллере представления, вы будете ссылаться на второй контроллер представления (либо из сеанса, либо путем его ручного вызова). Вы должны передать второй контроллер представления indexPath выбранного объекта , и может также передать ссылку на ваш объект модели (или, как я уже сказал, вы можете сделать объект модели глобально доступным синглтоном, и в этом случае вам не нужно будет передавать его.)

Затем, в второй (или третий) контроллер просмотра, если пользователь нажал кнопку вверх/вниз, у вас есть доступ к объекту модели, в котором хранятся ВСЕ данные, которые представляет ваше приложение, чтобы вы могли перейти к следующему объекту из любого контроллера вида. Если ваши данные упорядочены в разделах, строках или строках и столбцах, вы можете добавить следующие/предыдущие методы элементов в свою модель данных, поэтому вам нужно будет только один раз написать эту логику.

+0

Хорошо, я понимаю, что вы имеете в виду. И у меня действительно есть уже настроенная модель. Проблема в том, что я просто не знаю, как изменить представление из нового ViewController. Единственный способ сделать это - вернуться к предыдущей и нажать новую ячейку. Я хочу реализовать что-то вроде стрелок для viewcontroller. – user4938361

+0

Напишите свой второй контроллер представлений, чтобы иметь метод 'displayDataForIndexPath'. Попросите этот метод взять все данные из модели данных для этого indexPath и установить его в поля контроллера представления.Попросите метод viewWillAppear вашего контроллера просмотра вызвать метод displayDataForIndexPath. Затем, когда пользователь нажимает следующую или предыдущую кнопку, вычислите следующее значение indexPath и вызовите 'displayDataForIndexPath' с новым значением indexPath. –

+0

Извините за беспокойство, но это именно эта последняя часть ** Затем, когда пользователь нажимает следующую или предыдущую кнопку, вычислите следующее значение indexPath и вызовите displayDataForIndexPath с новым значением indexPath. ** Именно здесь, я знаю, как достичь. В вопросе, я спрашиваю, как найти значение indexPath. – user4938361

Смежные вопросы