IGListKit/Examples/Examples-iOS/IGListKitExamples/SectionControllers/FeedItemSectionController.swift

85 lines
2.7 KiB
Swift
Raw Normal View History

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import IGListKit
import IGListSwiftKit
final class FeedItemSectionController: ListSectionController, ListSupplementaryViewSource {
private var feedItem: FeedItem!
override init() {
super.init()
supplementaryViewSource = self
}
// MARK: IGListSectionController Overrides
override func numberOfItems() -> Int {
return feedItem.comments.count
}
override func sizeForItem(at index: Int) -> CGSize {
return CGSize(width: collectionContext!.containerSize.width, height: 55)
}
override func cellForItem(at index: Int) -> UICollectionViewCell {
let cell: LabelCell = collectionContext.dequeueReusableCell(for: self, at: index)
cell.text = feedItem.comments[index]
return cell
}
override func didUpdate(to object: Any) {
feedItem = object as? FeedItem
}
// MARK: ListSupplementaryViewSource
func supportedElementKinds() -> [String] {
return [UICollectionView.elementKindSectionHeader, UICollectionView.elementKindSectionFooter]
}
func viewForSupplementaryElement(ofKind elementKind: String, at index: Int) -> UICollectionReusableView {
switch elementKind {
case UICollectionView.elementKindSectionHeader:
return userHeaderView(atIndex: index)
case UICollectionView.elementKindSectionFooter:
return userFooterView(atIndex: index)
default:
fatalError()
}
}
func sizeForSupplementaryView(ofKind elementKind: String, at index: Int) -> CGSize {
return CGSize(width: collectionContext!.containerSize.width, height: 40)
}
// MARK: Private
private func userHeaderView(atIndex index: Int) -> UICollectionReusableView {
let view: UserHeaderView = collectionContext.dequeueReusableSupplementaryView(
ofKind: UICollectionView.elementKindSectionHeader,
forSectionController: self,
nibName: "UserHeaderView",
bundle: nil,
atIndex: index)
view.handle = "@" + feedItem.user.handle
view.name = feedItem.user.name
return view
}
private func userFooterView(atIndex index: Int) -> UICollectionReusableView {
let view: UserFooterView = collectionContext.dequeueReusableSupplementaryView(
ofKind: UICollectionView.elementKindSectionFooter,
forSectionController: self,
nibName: "UserFooterView",
bundle: nil,
atIndex: index)
view.commentsCount = "\(feedItem.comments.count)"
return view
}
}