UICollectionView
을 서브 클래스하고 dataSource
을 처리합니다. CollectionView의 init
단계 중에 dataSource
을 self
에 할당합니다.CollectionView dataSource는 UICollectionViewController를 사용할 때 작동하지 않지만 CollectionView와 함께 UIViewController를 사용할 때 작동합니다.
import Foundation
import UIKit
class CollectionViewSubclass: UICollectionView, UICollectionViewDataSource {
public override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(frame: frame, collectionViewLayout: layout)
dataSource = self
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
dataSource = self
}
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// This is called for the first case, but not the second
return 1
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// This is called for the first case, but not the second
return UICollectionViewCell()
}
}
- 사례 1 : 나는
CollectionViewSubclass
UIViewController
돌며을 사용할 때, 모두가 잘 작동하고 모두dataSource
방법 (numberOfItemsInSection
및cellForItemAt
가 제대로이라고 - 경우 2. 나는
CollectionViewSubclass
UICollectionViewController
돌며를 사용 어떤 이유로dataSource
메서드가 호출되지 않았지만 디버깅 할 때init(coder:)
이 실제로 호출되었고dataSource = self
이 실행되었습니다.하지만 어떻게 든 데이터 소스에이 다시 발생했습니다. ter 단계가 있으므로dataSource
메서드가 호출되지 않습니다.
나는 그 주위에 내 머리를 얻을 수 없으며 디버깅을 시도했지만 아무 소용이 없었다. 그 이유를 말해 주거나 디버깅 아이디어를 주시면 감사하겠습니다. 감사!
편집 : 나는 init
단계 이후 dataSource = self
를 할당 할 때, 모든 것이 잘 작동합니다. 그러나 나는 오히려 init
단계에서 그것을 할 것입니다. init
동안 어떻게 작동합니까? UICollectionViewConrtoller
docs 가입일
문서에서 매우 잘 잡습니다. 하지만 위에서 볼 수 있듯이 dataSource를 내 사용자 정의 collectionView에 할당하고 있습니다. 내가 뭘 놓치고 있니? 나는 틀린 장소에서 그것을하고 있다고 생각하니? init 단계에서 어디에서 그렇게 할 수 있습니까? 왜냐하면 나중에 과제를 수행 할 때 제대로 작동하지만 init 단계에서 dataSource를 할당하고 싶습니다. –
'UICollectionViewConrtoller'를 사용하면 어떻게됩니까 : ** 1. ** View Controller가 초기화됩니다. . ** 2. ** 사용자 정의 콜렉션 뷰가 초기화됩니다. (이 시점에서'dataSource'는 콜렉션 뷰입니다. ** 3. ** 콜렉션 뷰가 뷰 컨트롤러에 할당됩니다 -이 시점에서 뷰 컨트롤러는'dataSource'를 인수합니다. – njuri
init 단계에서 datasource를 지정하려고한다는 아이디어를 얻었지만, 스스로를 구성하는 뷰를 갖는 것은 좋지 않습니다. 메인 뷰 태스크는 * 정보를 표시하고 사용자 이벤트를 보내는 것입니다. -보기 구성 및 대리인 및/또는 데이터 소스가 됨 – njuri