나는이 문제를 몇 시간 동안 풀려고했으나 적절한 해결책을 찾지 못했습니다. 머리글에 세그먼트 컨트롤이있는 사용자 지정 UICollectionView가 있어야합니다. 세그먼트 화 된 제어 색인을 변경하면 셀이 다르게 렌더링됩니다. 지금까지는 내 collectionView의 머리글에 세그먼트 컨트롤을 표시 할 수 있지만 내 UserSearchHeader 내부의 collectionView 내용을 변경하면 작동하지 않습니다.Swift에서 헤더의 분할 된 컨트롤로 UICollectionView의 내용을 변경
UICollectionView의 서브 클래스이고 UICollectionViewDelegateFlowLayout 프로토콜을 준수하는 UserSearchController이라는 사용자 지정 UICollectionView를 만들었습니다.
class UserSearchController: UICollectionViewController,
UICollectionViewDelegateFlowLayout, UISearchBarDelegate { ....
내 사용자 정의 collectionView UserSearchController은 사용자 정의 헤더 (UserSearchHeader) 및 사용자 정의 세포 (UserSearchCell)가 있습니다.
collectionView?.register(UserSearchCell.self, forCellWithReuseIdentifier: cellId)
collectionView?.register(UserSearchHeader.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "headerId")
UserSearchHeader는 세그먼트 컨트롤이 포함되어 있습니다.
class UserSearchHeader: UICollectionViewCell {
var segmentedControl: UISegmentedControl = {
let sc = UISegmentedControl(items: ["Username", "Hashtag"])
sc.translatesAutoresizingMaskIntoConstraints = false
sc.tintColor = UIColor.black
sc.selectedSegmentIndex = 0 // automatically highlight
// sc.addTarget(self, action: #selector(segmentedChange), for: .valueChanged)
return sc
}() .....
segmentedIndex 내가 segmentedIndex 내가 (세그먼트 컨트롤을 클릭) 다른 cellClass으로 렌더링 할 일 경우 UserSearchCell 클래스와 세포를 렌더링 할 0 인 경우
. 이러한 여러 클래스를 사용하여이 동작을 어떻게 수행 할 수 있습니까? UserSearchController 내부의 메소드에서 cellForItem을 사용하여 세그먼트 화 된 컨트롤의 상태를 점검해야한다. 그러나 어떻게 세그먼트 화 된 컨트롤이 UserSearchHeader 클래스에 정의되어있을 때이 작업을 수행 할 수 있습니다. override func collectionView(_ collectionView:
UICollectionView, cellForItemAt indexPath: IndexPath) ->
UICollect. ionViewCell { if segmentedControl.segmentedIndex = 0 ....}
네, 당신이 쉽게 수행 할 수 있습니다. 선택한 색인을 변경 한 후에 콜렉션 뷰를 다시로드해야합니다. 그리고 셀 인덱스에서 셀을 선택하십시오. 선택된 인덱스가 0인지 확인하십시오. cell2 –
이 시도했는데 segmentedControl UserSearchHeader 정의되어 있기 때문에이 작동하지 않습니다.분할 된 컨트롤의 targetAction이 실행되지 않기 때문에 내용이 변경되지 않습니다. –
그런 다음 선택한 인덱스 변경을 알리고 선택한 인덱스도 전달하는 프로토콜을 만듭니다. –