Full configurable spreadsheet view user interfaces for iOS applications. With this framework, you can easily create complex layouts like schedule, Gantt chart, timetable as if you are using Excel.
- Fixed column and row headers
- Merge cells
- Circular infinite scrolling automatically
- Customize grids and borders for each cell
- Customize inter cell spacing vertically and horizontally
- Fast scrolling, memory efficient
-
UICollectionView
like API - Well unit tested
Find the above displayed examples in the Examples
folder.
SpreadsheetView is written in Swift 3. Compatible with iOS 8.0+
SpreadsheetView is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'SpreadsheetView'
For Carthage, add the following to your Cartfile
:
github "kishikawakatsumi/SpreadsheetView"
The minimum requirement is connecting a data source to return the number of columns/rows, and each column width/row height.
import UIKit
import SpreadsheetView
class ViewController: UIViewController, SpreadsheetViewDataSource {
@IBOutlet weak var spreadsheetView: SpreadsheetView!
override func viewDidLoad() {
super.viewDidLoad()
spreadsheetView.dataSource = self
}
func numberOfColumns(in spreadsheetView: SpreadsheetView) -> Int {
return 200
}
func numberOfRows(in spreadsheetView: SpreadsheetView) -> Int {
return 400
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, widthForColumn column: Int) -> CGFloat {
return 80
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, heightForRow row: Int) -> CGFloat {
return 40
}
}
Freezing a column or row behaves as a fixed column/row header.
func frozenColumns(in spreadsheetView: SpreadsheetView) -> Int {
return 1
}
func frozenRows(in spreadsheetView: SpreadsheetView) -> Int {
return 2
}
func frozenColumns(in spreadsheetView: SpreadsheetView) -> Int {
return 2
}
func frozenRows(in spreadsheetView: SpreadsheetView) -> Int {
return 2
}
Multiple cells can be merged and then they are treated as one cell. It is used for grouping cells.
func mergedCells(in spreadsheetView: SpreadsheetView) -> [CellRange] {
return [CellRange(from: (row: 1, column: 1), to: (row: 3, column: 2)),
CellRange(from: (row: 3, column: 3), to: (row: 8, column: 3)),
CellRange(from: (row: 4, column: 0), to: (row: 7, column: 2)),
CellRange(from: (row: 2, column: 4), to: (row: 5, column: 8)),
CellRange(from: (row: 9, column: 0), to: (row: 10, column: 5)),
CellRange(from: (row: 11, column: 2), to: (row: 12, column: 4))]
}
Your table acquires infinite scroll just set circularScrolling
property.
spreadsheetView.circularScrolling = CircularScrolling.Configuration.horizontally
spreadsheetView.circularScrolling = CircularScrolling.Configuration.vertically
spreadsheetView.circularScrolling = CircularScrolling.Configuration.both
If circular scrolling is enabled, you can set additional parameters that the option not to repeat column/row header and to extend column/row header to the left/top edges. CircularScrolling.Configuration
is a builder pattern, can easily select the appropriate combination by chaining properties.
e.g.
spreadsheetView.circularScrolling =
CircularScrolling.Configuration.horizontally.columnHeaderNotRepeated
spreadsheetView.circularScrolling =
CircularScrolling.Configuration.both.columnHeaderStartsFirstRow
spreadsheetView.intercellSpacing = CGSize(width: 1, height: 1)
SpreadsheetView
's gridStyle
property is applied to the entire table.
spreadsheetView.gridStyle = .solid(width: 1, color: .lightGray)
You can set different gridStyle
for each cell and each side of the cell. If you set cell's gridStyle
property to default
, SpreadsheetView
's gridStyle
property will be applied. Specify none
means the grid will not be drawn.
cell.grids.top = .solid(width: 1, color: .blue)
cell.grids.left = .solid(width: 1, color: .blue)
cell.grids.bottom = .none
cell.grids.right = .none
You can set different borderStyle
for each cell as well.
cell.borders.top = .solid(width: 1, color: .red)
cell.borders.left = .solid(width: 1, color: .red)
cell.borders.bottom = .solid(width: 1, color: .red)
cell.borders.right = .solid(width: 1, color: .red)
Kishikawa Katsumi, kishikawakatsumi@mac.com
SpreadsheetView is available under the MIT license. See the LICENSE file for more info.