IGListKit/Examples/Examples-iOS/IGListKitExamples/ViewControllers/EmptyViewController.swift

83 lines
2.6 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 UIKit
final class EmptyViewController: UIViewController, ListAdapterDataSource, RemoveSectionControllerDelegate {
lazy var adapter: ListAdapter = {
return ListAdapter(updater: ListAdapterUpdater(), viewController: self)
}()
lazy var collectionView: UICollectionView = {
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
collectionView.backgroundColor = UIColor.secondaryBackground
return collectionView
}()
let emptyLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.textAlignment = .center
label.text = "No more data!"
label.backgroundColor = .clear
return label
}()
var tally = 4
var data = [1, 2, 3, 4]
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add,
target: self,
action: #selector(EmptyViewController.onAdd))
view.addSubview(collectionView)
adapter.collectionView = collectionView
adapter.dataSource = self
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
collectionView.frame = view.bounds
}
@objc func onAdd() {
data.append(tally + 1)
tally += 1
adapter.performUpdates(animated: true, completion: nil)
}
// MARK: ListAdapterDataSource
func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
return data as [ListDiffable]
}
func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
let sectionController = RemoveSectionController()
sectionController.delegate = self
return sectionController
}
func emptyView(for listAdapter: ListAdapter) -> UIView? {
return emptyLabel
}
// MARK: RemoveSectionControllerDelegate
func removeSectionControllerWantsRemoved(_ sectionController: RemoveSectionController) {
let section = adapter.section(for: sectionController)
guard let object = adapter.object(atSection: section) as? Int, let index = data.firstIndex(of: object) else { return }
data.remove(at: index)
adapter.performUpdates(animated: true, completion: nil)
}
}