Sapporo
  • October 8, 2023

cellmodel-driven collectionview manager

Features


  • Easy to manage your sections and cells (reset/insert/append/remove/update)
  • Don’t have to write the code for UICollectionViewDelegate and UICollectionViewDataSource protocols
  • Don’t need to care about cell identifier
  • Handle cell selection by trailing closure
  • Supports method chaining
  • Supports subscript
  • Complete example

Quick example

// viewController swift file

let sapporo = Sapporo(collectionView: self.collectionView)

let cellmodel = YourCellModel(title: “Title”, des: “description”) {
println(“Did select cell with title = \(title)”)
}

let topSection = SASection()

sapporo
.reset(topSection)
.bump()

topSection
.append(cellmodel)// append a new cell model in datasource
.bump()// show the new cell in the collection view

topSection
.remove(1…3)
.bump()

topSection
.move(fromIndex: 0, toIndex: 3)
.bump()

// your cell swift file

class YourCellModel : SACellModel {
let title: String
let des: String

init(title: String, des: String, selectionHandler: (SACell) -> Void) {
self.title = title
self.des = des
super.init(cellType: YourCell.self, selectionHandler: selectionHandler)
}
}

class YourCell : SACell, SACellType {
typealias CellModel = YourCellModel

@IBOutlet weak var titleLabel: UILabel!

override func configure() {
super.configure()

guard let cellmodel = cellmodel else {
return
}

titleLabel.text = cellmodel.title
}
}
}
}

Usage


  • Handling section

// inserting
sapporo.insert(section, atIndex: 1)
.bump()

// moving
sapporo.move(fromIndex: 1, toIndex: 5)
.bump()

// removing
sapporo.remove(index)
.bump()

// remove all data
sapporo.reset()
.bump()

// handing section index by enum
enum Section: Int, SASectionIndexType {
case top
case center
case bottom

static let count = 3
}

let topSection = sapporo[Section.Top]

  • Handling cell

// appending
sapporo[0]
.append(cellmodel)// append a cellmodel
.bump()// and bump to show the cell in the collection view

sapporo[TopSection]
.append(cellmodels)// append a list of cellmodels
.bump()

// by using section
let section = sapporo[Section.Top]
section
.append(cellmodel)
.bump()

// 2. inserting
section
.insert(cellmodels, atIndex: 1)
.bump()

section
.insertBeforeLast(cellmodels)
.bump()

// 3. reseting
section
.reset(cellmodels)// replace current data in section by the new data
.bump()

section
.reset()// or remove all data in section
.bump()

// 4. moving
section
.move(fromIndex: 5, toIndex: 1)
.bump()

// 5. removing
section
.remove(1)
.bump()

section
.remove(cellmodel)
.bump()

section
.remove(2…5)
.bump()

section
.removeLast()
.bump()

// updating cell
let cellmodel = section[1]
cellmodel.property = newData
cellmodel.bump()

// able to retrieve a cellmodel by indexpath
let cellmodel = sapporo[indexpath]

  • Registering cell, header, footer, reusable view

sapporo
.registerCellByNib(CustomCell)
.registerCell(SimpleCell)
.registerSupplementaryViewByNib(HeaderView.self, kind: “SectionHeader”)

  • Customizing layout

In case you want to customize the layout of collection view, just create a subclass of SALayout and call setLayout method to set the new layout instance.

class CustomLayout: SALayout {
// the implementation for your layout
}

let layout = CustomLayout()
sapporo.setLayout(layout)

Installation


  • Using Carthage

    • Insert github nghialv/Sapporo to your Cartfile
    • Run carthage update
  • Using CocoaPods

    • Insert followings to your Podfile

use_frameworks!

target ‘YOUR_TARGET_NAME’ do
pod ‘Sapporo’
end

    • Run pod install
  • Using submodule

Requirements


  • iOS 9.0+
  • Xcode 9+
  • Swift 4

GitHub


View Github

#autolayout #cocoapods #framework #swift #uicollectionview
YOU MIGHT ALSO LIKE...
PermissionsSwiftUI: A SwiftUI package to handle permissions

PermissionsSwiftUI displays and handles permissions in SwiftUI. It is largely inspired by SPPermissions. The UI is highly customizable and resembles an Apple style. ...

Pager tab strip view

Introduction PagerTabStripView is the first pager view built in pure SwiftUI. It provides a component to create interactive pager views ...

PageView

SwiftUI view enabling page-based navigation, imitating the behaviour of UIPageViewController in iOS.

Pages

    

How to take action when a property changes

1. Taking Action When a Property Changes: Property Observers Swift lets you observe and respond to changes in a property’s ...