Latest 3.0.0
Homepage https://github.com/nghialv/Sapporo
License MIT
Platforms ios 9.0, requires ARC
Authors

Language
[CocoaPods]()
[Carthage compatible]
(https://github.com/Carthage/Carthage)
License
Issues

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
// retrieve a section or create a new section if it doesn't already exist
let section = sapporo[0]

// 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

License

Sapporo is released under the MIT License.

Latest podspec

{
    "name": "Sapporo",
    "version": "3.0.0",
    "summary": "cellmodel-driven collectionview manager",
    "homepage": "https://github.com/nghialv/Sapporo",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "Le Van Nghia": "[email protected]"
    },
    "social_media_url": "https://twitter.com/nghialv2607",
    "swift_version": "4.1",
    "platforms": {
        "ios": "9.0"
    },
    "source": {
        "git": "https://github.com/nghialv/Sapporo.git",
        "tag": "3.0.0"
    },
    "source_files": "Sapporo/**/*.swift",
    "requires_arc": true
}

Pin It on Pinterest

Share This