Skip to content

Instantly share code, notes, and snippets.

@Noitidart
Created June 22, 2017 07:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Noitidart/585cd75de653fc5ef321b6c6b99b9d34 to your computer and use it in GitHub Desktop.
Save Noitidart/585cd75de653fc5ef321b6c6b99b9d34 to your computer and use it in GitHub Desktop.
//
// SampleView.swift
// ss
//
// Created by Noitidart Saab on 6/18/17.
// Copyright © 2017 Facebook. All rights reserved.
//
import Foundation
import UIKit
import SpreadsheetView
class ViewController: UIViewController, SpreadsheetViewDataSource, SpreadsheetViewDelegate {
let spreadsheetView = SpreadsheetView()
let dates = ["7/10/2017", "7/11/2017", "7/12/2017", "7/13/2017", "7/14/2017", "7/15/2017", "7/16/2017"]
let days = ["MONDAY", "TUESDAY", "WEDNSDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]
let dayColors = [UIColor(red: 0.918, green: 0.224, blue: 0.153, alpha: 1),
UIColor(red: 0.106, green: 0.541, blue: 0.827, alpha: 1),
UIColor(red: 0.200, green: 0.620, blue: 0.565, alpha: 1),
UIColor(red: 0.953, green: 0.498, blue: 0.098, alpha: 1),
UIColor(red: 0.400, green: 0.584, blue: 0.141, alpha: 1),
UIColor(red: 0.835, green: 0.655, blue: 0.051, alpha: 1),
UIColor(red: 0.153, green: 0.569, blue: 0.835, alpha: 1)]
let hours = ["6:00 AM", "7:00 AM", "8:00 AM", "9:00 AM", "10:00 AM", "11:00 AM", "12:00 AM", "1:00 PM", "2:00 PM",
"3:00 PM", "4:00 PM", "5:00 PM", "6:00 PM", "7:00 PM", "8:00 PM", "9:00 PM", "10:00 PM", "11:00 PM"]
let evenRowColor = UIColor(red: 0.914, green: 0.914, blue: 0.906, alpha: 1)
let oddRowColor: UIColor = .white
let data = [
["", "", "Take medicine", "", "", "", "", "", "", "", "", "", "", "Movie with family", "", "", "", "", "", ""],
["Leave for cabin", "", "", "", "", "Lunch with Tim", "", "", "", "", "", "", "", "", "", "", "", "", "", ""],
["", "", "", "", "Downtown parade", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""],
["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Fireworks show", "", "", ""],
["", "", "", "", "", "Family BBQ", "", "", "", "", "", "", "", "", "", "", "", "", "", ""],
["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""],
["", "", "", "", "", "", "", "", "", "", "", "", "", "Return home", "", "", "", "", "", ""]
]
override func viewDidLoad() {
super.viewDidLoad()
spreadsheetView.dataSource = self
spreadsheetView.delegate = self
spreadsheetView.contentInset = UIEdgeInsets(top: 4, left: 0, bottom: 4, right: 0)
spreadsheetView.intercellSpacing = CGSize(width: 4, height: 1)
spreadsheetView.gridStyle = .none
spreadsheetView.register(DateCell.self, forCellWithReuseIdentifier: String(describing: DateCell.self))
spreadsheetView.register(TimeTitleCell.self, forCellWithReuseIdentifier: String(describing: TimeTitleCell.self))
spreadsheetView.register(TimeCell.self, forCellWithReuseIdentifier: String(describing: TimeCell.self))
spreadsheetView.register(DayTitleCell.self, forCellWithReuseIdentifier: String(describing: DayTitleCell.self))
spreadsheetView.register(ScheduleCell.self, forCellWithReuseIdentifier: String(describing: ScheduleCell.self))
self.view = spreadsheetView
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
spreadsheetView.flashScrollIndicators()
}
// MARK: DataSource
func numberOfColumns(in spreadsheetView: SpreadsheetView) -> Int {
return 1 + days.count
}
func numberOfRows(in spreadsheetView: SpreadsheetView) -> Int {
return 1 + 1 + hours.count
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, widthForColumn column: Int) -> CGFloat {
if case 0 = column {
return 70
} else {
return 120
}
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, heightForRow row: Int) -> CGFloat {
if case 0 = row {
return 24
} else if case 1 = row {
return 32
} else {
return 40
}
}
func frozenColumns(in spreadsheetView: SpreadsheetView) -> Int {
return 1
}
func frozenRows(in spreadsheetView: SpreadsheetView) -> Int {
return 2
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, cellForItemAt indexPath: IndexPath) -> Cell? {
if case (1...(dates.count + 1), 0) = (indexPath.column, indexPath.row) {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: DateCell.self), for: indexPath) as! DateCell
cell.label.text = dates[indexPath.column - 1]
return cell
} else if case (1...(days.count + 1), 1) = (indexPath.column, indexPath.row) {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: DayTitleCell.self), for: indexPath) as! DayTitleCell
cell.label.text = days[indexPath.column - 1]
cell.label.textColor = dayColors[indexPath.column - 1]
return cell
} else if case (0, 1) = (indexPath.column, indexPath.row) {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: TimeTitleCell.self), for: indexPath) as! TimeTitleCell
cell.label.text = "TIME"
return cell
} else if case (0, 2...(hours.count + 2)) = (indexPath.column, indexPath.row) {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: TimeCell.self), for: indexPath) as! TimeCell
cell.label.text = hours[indexPath.row - 2]
cell.backgroundColor = indexPath.row % 2 == 0 ? evenRowColor : oddRowColor
return cell
} else if case (1...(days.count + 1), 2...(hours.count + 2)) = (indexPath.column, indexPath.row) {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: ScheduleCell.self), for: indexPath) as! ScheduleCell
let text = data[indexPath.column - 1][indexPath.row - 2]
if !text.isEmpty {
cell.label.text = text
let color = dayColors[indexPath.column - 1]
cell.label.textColor = color
cell.color = color.withAlphaComponent(0.2)
cell.borders.top = .solid(width: 2, color: color)
cell.borders.bottom = .solid(width: 2, color: color)
} else {
cell.label.text = nil
cell.color = indexPath.row % 2 == 0 ? evenRowColor : oddRowColor
cell.borders.top = .none
cell.borders.bottom = .none
}
return cell
}
return nil
}
/// Delegate
func spreadsheetView(_ spreadsheetView: SpreadsheetView, didSelectItemAt indexPath: IndexPath) {
print("Selected: (row: \(indexPath.row), column: \(indexPath.column))")
}
}
class SampleView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
label.text = "This is Swift"
self.addSubview(label)
let controller = ViewController();
self.addSubview(controller.view);
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment