CocoaPods trunk is moving to be read-only. Read more on the blog, there are 19 months to go.

Sapporo 3.0.0

Sapporo 3.0.0

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Aug 2018
SPMSupports SPM

Maintained by nghialv, ra1028.



Sapporo 3.0.0

Sapporo

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.