Первым параметром для различных источников данных и методов делегатов является представление коллекции.
Я не рекомендую использовать теги представления, как предлагал другой участник. Этот подход - fr agile.
Вместо этого ваш контроллер представления должен сохранять указатели на каждый из них, а затем иметь методы проверки, какой из них вызывается:
@IBOulet collectionView1: UICollectionView!
@IBOulet collectionView2: UICollectionView!
Затем в вашем методе viewForSupplementaryElementOfKind :
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
switch collectionView {
case collectionView1:
//code to return a view for collection view 1
case collectionView2:
//code to return a view for collection view 2
default:
//Can't happen, but keep the compiler happy:
return UIView(frame: CGRect.zeroRect)
}
}
Альтернативно, установите отдельные объекты, которые будут служить источниками данных для каждого представления коллекции. Попросите ваш контроллер представления создать источники данных и подключить их в своем методе viewDidLoad.
Если у одного представления коллекции есть заголовок, а у другого его нет, вам необходимо настроить объекты макета отдельно для каждого представления коллекции. (Вам необходимо иметь код, подобный приведенному выше, который обрабатывает два представления коллекции отдельно для ALL ваших методов представления коллекции.)