Last active
July 7, 2020 10:35
-
-
Save Dev1an/a79985b1052afcdc70517ca539ada858 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
import SwiftUI | |
struct ContentView: View { | |
@State private var model = Model() | |
var body: some View { | |
ZStack { | |
CustomCollectionView(lastSelectedIndex: $model.index) | |
IndexPreviewer(model: model) | |
} | |
} | |
} | |
struct IndexPreviewer: View { | |
@ObservedObject var model: Model | |
var body: some View { | |
Text("Current Selected Index \(model.index)") | |
} | |
} | |
class Model: ObservableObject { | |
@Published var index = -1 | |
} | |
struct CustomCollectionView: UIViewRepresentable { | |
//@Binding var lastSelectedIndex : Int | |
var lastSelectedIndex: Binding<Int> | |
func makeUIView(context: Context) -> UICollectionView { | |
let flowLayout = UICollectionViewFlowLayout() | |
flowLayout.itemSize = CGSize(width: 400, height: 300) | |
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) | |
collectionView.register(CustomCollectionViewCell.self, forCellWithReuseIdentifier: CustomCollectionViewCell.reuseId) | |
collectionView.delegate = context.coordinator | |
collectionView.dataSource = context.coordinator | |
collectionView.backgroundColor = .systemBackground | |
collectionView.isDirectionalLockEnabled = true | |
collectionView.backgroundColor = UIColor.black | |
collectionView.showsVerticalScrollIndicator = false | |
collectionView.showsHorizontalScrollIndicator = false | |
collectionView.alwaysBounceVertical = false | |
return collectionView | |
} | |
func updateUIView(_ uiView: UICollectionView, context: Context) { | |
uiView.reloadData() | |
} | |
func makeCoordinator() -> CustomCoordinator { | |
CustomCoordinator(self) | |
} | |
} | |
class CustomCoordinator: NSObject, UICollectionViewDataSource, UICollectionViewDelegate { | |
var parent:CustomCollectionView | |
init(_ parent:CustomCollectionView) { | |
self.parent = parent | |
} | |
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
100 | |
} | |
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CustomCollectionViewCell.reuseId, for: indexPath) as! CustomCollectionViewCell | |
cell.backgroundColor = UIColor.red | |
cell.label.text = "My Index is \(indexPath.row)" | |
NSLog("Called for Index \(indexPath.row)") | |
return cell | |
} | |
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | |
parent.lastSelectedIndex.wrappedValue = indexPath.row | |
} | |
} | |
class CustomCollectionViewCell: UICollectionViewCell { | |
static let reuseId = "customCell" | |
let label = UILabel() | |
override init(frame: CGRect) { | |
super.init(frame: frame) | |
label.numberOfLines = 0 | |
contentView.addSubview(label) | |
label.translatesAutoresizingMaskIntoConstraints = false | |
label.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true | |
label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).isActive = true | |
label.trailingAnchor.constraint(equalTo: contentView.trailingAnchor).isActive = true | |
label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true | |
} | |
required init?(coder aDecoder: NSCoder) { | |
fatalError("init(coder:) has not been implemented") | |
} | |
} | |
struct ContentView_Previews: PreviewProvider { | |
static var previews: some View { | |
ContentView() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment