UIViewController의 여러 collectionView-IOS Swift
나는 이것을 깨닫기 위해 여러 날을 노력했다.
내 UIViewController에 두 개의 다른 CollectionView를 추가하고 싶습니다. 예를 들어 이러한 collectionView에 이미지를 넣고 싶습니다. 각 CollectionView는 자체 이미지를 사용합니다. 이것이 가능한가?
누군가 나에게 도움을 줄 수 있다면 매우 기쁠 것입니다. :)
가능합니다. 각 UICollectionView를 서브 뷰로 추가하고 델리게이트와 데이터 소스를 UIViewController에 설정하기 만하면됩니다.
다음은 간단한 예입니다. 하나의 UICollectionView가 작동한다고 가정하면이 코드를 자신의 용도에 맞게 조정하여 두 번째 코드를 상당히 쉽게 추가 할 수 있습니다.
let collectionViewA = UICollectionView()
let collectionViewB = UICollectionView()
let collectionViewAIdentifier = "CollectionViewACell"
let collectionViewBIdentifier = "CollectionViewBCell"
override func viewDidLoad() {
// Initialize the collection views, set the desired frames
collectionViewA.delegate = self
collectionViewB.delegate = self
collectionViewA.dataSource = self
collectionViewB.dataSource = self
self.view.addSubview(collectionViewA)
self.view.addSubview(collectionViewB)
}
cellForItemAtIndexPath 대리자 함수에서 :
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if collectionView == self.collectionViewA {
let cellA = collectionView.dequeueReusableCellWithReuseIdentifier(collectionViewAIdentifier) as UICollectionViewCell
// Set up cell
return cellA
}
else {
let cellB = collectionView.dequeueReusableCellWithReuseIdentifier(collectionViewBIdentifier) as UICollectionViewCell
// ...Set up cell
return cellB
}
}
numberOfItemsInSection 함수에서 :
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if collectionView == self.collectionViewA {
return 0 // Replace with count of your data for collectionViewA
}
return 0 // Replace with count of your data for collectionViewB
}
예, 이것은 전적으로 가능합니다. 각각의 UICollectionViewDelegates / UICollectionViewDataSources를 다른 클래스에 할당하거나 CollectionView를 하위 클래스로 지정하여 현재 viewController에 대리자와 데이터 소스를 할당하고 다음과 같은 위임 메서드에서 collectionView에 대한 참조를 다운 캐스트 할 수 있습니다.
@IBOutlet collectionViewA: CustomCollectionViewA!
@IBOutlet collectionViewB: CustomCollectionViewB!
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if let a = collectionView as? CustomCollectionViewA {
return a.dequeueReusableCellWithIdentifier("reuseIdentifierA", forIndexPath: indexPath)
} else {
return collectionView.dequeueReusableCellWithIdentifier("reuseIdentifierB", forIndexPath: indexPath)
}
}
해당 collectionview에 대한 아웃렛 생성 : 아웃렛 :
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var SecondCollectioView: UICollectionView!
방법:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCell", for: indexPath) as UICollectionViewCell
if(collectionView == self.SecondCollectioView) {
cell.backgroundColor = UIColor.black
} else {
cell.backgroundColor = self.randomColor()
}
return cell;
}
이것은 또 다른 방법이 될 것입니다.
다음은 swift 4 용 작업 버전입니다.
이 코드는 별도의 도우미 파일에 있습니다.
import UIKit
class collectionViews {
static func collectionViewOne() -> UICollectionView {
let layout = UICollectionViewFlowLayout()
let collectionViewOne = UICollectionView(frame: CGRect(x: 0, y: 20, width: 200, height: 100), collectionViewLayout: layout)
return collectionViewOne
}
static func collectionViewTwo() -> UICollectionView {
let layout = UICollectionViewFlowLayout()
let collectionViewTwo = UICollectionView(frame: CGRect(x: 0, y: 300, width: 200, height: 100), collectionViewLayout: layout)
return collectionViewTwo
}
}
다음은 뷰 컨트롤러 코드입니다.
import UIKit
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
let collectionViewOne = collectionViews.collectionViewOne()
let collectionViewTwo = collectionViews.collectionViewTwo()
var myArray = ["1", "2"]
var myArray2 = ["3", "4"]
override func viewDidLoad() {
super.viewDidLoad()
collectionViewOne.delegate = self
collectionViewOne.dataSource = self
collectionViewOne.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "MyCell")
view.addSubview(collectionViewOne)
collectionViewTwo.delegate = self
collectionViewTwo.dataSource = self
collectionViewTwo.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "MyCell2")
view.addSubview(collectionViewTwo)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if collectionView == self.collectionViewOne {
return myArray.count
} else {
return myArray2.count
}
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if collectionView == self.collectionViewOne {
let myCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath as IndexPath)
myCell.backgroundColor = UIColor.red
return myCell
} else {
let myCell2 = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell2", for: indexPath as IndexPath)
myCell2.backgroundColor = UIColor.blue
return myCell2
}
}
}
참조 URL : https://stackoverflow.com/questions/28750108/multiple-collectionview-in-a-uiviewcontroller-ios-swift
'code' 카테고리의 다른 글
Python try finally 블록 반환 (0) | 2021.01.10 |
---|---|
Docker의 컨테이너 이름은 언제 사용합니까? (0) | 2021.01.10 |
Firebase 데이터를 Java 개체로 변환하는 방법…? (0) | 2021.01.10 |
BufRead에서 vim 설정 오류 (0) | 2021.01.10 |
iPhone X에서 UIView의 safeAreaInsets가 0입니다. (0) | 2021.01.10 |