Skip to content

Instantly share code, notes, and snippets.

View karigrooms's full-sized avatar

Kari Grooms karigrooms

View GitHub Profile
@karigrooms
karigrooms / swiftui-uicollectionviewcell-1.swift
Created February 23, 2021 18:46
Blog post: SwiftUI with UICollectionView - 2. Embed SwiftUI Card in UICollectionViewCell
import SwiftUI
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
static var reuseIdentifier = "MyCollectionViewCell"
lazy var host: UIHostingController = {
return UIHostingController(rootView: Card())
}()
@karigrooms
karigrooms / swiftui-uicollectionview-1.swift
Created February 23, 2021 18:54
Blog post: SwiftUI with UICollectionView - 3. Setup the UICollectionView
import SwiftUI
import UIKit
class CollectionViewExample: UIViewController {
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.backgroundColor = UIColor(named: "Light")
@karigrooms
karigrooms / swiftui-uicollectionviewcell-2.swift
Last active February 23, 2021 19:14
Blog post: SwiftUI with UICollectionView - 4. UIHostingController Setup/Cleanup
import SwiftUI
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
lazy var host: UIHostingController = {
return UIHostingController(rootView: Card())
}()
//...
@karigrooms
karigrooms / swiftui-uicollectionview-2.swift
Created February 23, 2021 19:16
Blog post: SwiftUI with UICollectionView - 5. Add SwiftUI UIHostingController as a child of our UIViewController
//...
extension CollectionViewExample: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 9
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MyCollectionViewCell.reuseIdentifier, for: indexPath) as? MyCollectionViewCell else {
@karigrooms
karigrooms / swiftui-card-view-2.swift
Created February 23, 2021 19:21
Blog post: SwiftUI with UICollectionView - 6. Update card to accept data
import SwiftUI
protocol CardContent {
var imageName: String { get }
var title: String { get }
var description: String { get }
}
struct Card: View {
@karigrooms
karigrooms / swiftui-uicollectionviewcell-3.swift
Created February 23, 2021 19:37
Blog post: SwiftUI with UICollectionView - 7. Refactored to pass data to the SwiftUI Card
import SwiftUI
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
static var reuseIdentifier = "MyCollectionViewCell"
typealias Content = Card.Content
private(set) var host: UIHostingController<Card>?
@karigrooms
karigrooms / swiftui-uicollectionview-3.swift
Created February 23, 2021 20:01
Blog post: SwiftUI with UICollectionView - 8. Add fixture data to pass to cells
import SwiftUI
import UIKit
class CollectionViewExample: UIViewController {
//...
// MARK: Data
struct Item: MyCollectionViewCell.Content {
@karigrooms
karigrooms / swiftuicollectionviewcell.swift
Created February 23, 2021 20:09
Blog post: SwiftUI with UICollectionView - 9. Subclass for embedding a SwiftUI View inside of UICollectionViewCell
import SwiftUI
import UIKit
/// Subclass for embedding a SwiftUI View inside of UICollectionViewCell
/// Usage: `class MySwiftUICell: SwiftUICollectionViewCell<Card> { ... }`
open class SwiftUICollectionViewCell<Content>: UICollectionViewCell where Content: View {
/// Controller to host the SwiftUI View
private(set) var host: UIHostingController<Content>?
@karigrooms
karigrooms / swiftui-uicollectionviewcell-4.swift
Created February 23, 2021 20:18
Blog post: SwiftUI with UICollectionView - 10. Update our cell to subclass SwiftUICollectionViewCell
import SwiftUI
import UIKit
class MyCollectionViewCell: SwiftUICollectionViewCell<Card> {
static var reuseIdentifier = "MyCollectionViewCell"
typealias Content = Card.Content
func configure(with content: Content, parent: UIViewController) {
@karigrooms
karigrooms / swiftui-uicollectionview-3.swift
Last active February 24, 2021 00:45
Blog post: SwiftUI with UICollectionView - 11. Sizing our cell via UICollectionViewDelegateFlowLayout
// MARK: UICollectionViewDelegateFlowLayout
extension CollectionViewExample: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 240, height: 320)
}
}