Skip to content

Instantly share code, notes, and snippets.

@128keaton
Created November 12, 2016 03:12
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 128keaton/ff0f674d05819e6b65992c101a3ada4e to your computer and use it in GitHub Desktop.
Save 128keaton/ff0f674d05819e6b65992c101a3ada4e to your computer and use it in GitHub Desktop.
//
// ProfileViewController.swift
// Bg-Mon
//
// Created by Keaton Burleson on 4/4/16.
// Copyright © 2016 Keaton Burleson. All rights reserved.
//
import Foundation
import UIKit
import MBProgressHUD
import CRGradientNavigationBar
public extension UIImage {
convenience init(color: UIColor, size: CGSize = CGSizeMake(1, 1)) {
let rect = CGRectMake(0, 0, size.width, size.height)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.init(CGImage: image.CGImage!)
}
}
class ProfileViewController: UITableViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate {
@IBOutlet var highscore: UILabel?
@IBOutlet var lowscore: UILabel?
@IBOutlet var sensitivity: UITextField?
@IBOutlet var targetBG: UITextField?
@IBOutlet var carbRatio: UITextField?
@IBOutlet var doctorName: UITextField?
@IBOutlet var doctorEmail: UITextField?
@IBOutlet var name: UITextField?
@IBOutlet var discardButton: UIBarButtonItem?
@IBOutlet var longBrandField: UITextField?
@IBOutlet var longBrandLabel: UILabel?
@IBOutlet var fastBrandField: UITextField?
@IBOutlet var fastBrandLabel: UILabel?
@IBOutlet var fastUnits: UITextField?
@IBOutlet var longUnits: UITextField?
@IBOutlet var switchReminders: UISwitch?
@IBOutlet var switchAmerica: UISwitch?
@IBOutlet var switchRound: UISwitch?
var hud: MBProgressHUD?
let defaults = NSUserDefaults(suiteName: "group.com.128keaton.test-strip")
override func viewDidLoad() {
super.viewDidLoad()
let gradientBar = self.navigationController?.navigationBar as! CRGradientNavigationBar
gradientBar.setBarTintGradientColors([UIColor(hue: 11/360, saturation: 73/100, brightness: 83/100, alpha: 1.0), UIColor(hue: 337/360, saturation: 69/100, brightness: 65/100, alpha: 1.0)])
if objectAlreadyExist("profile-name") {
name!.text = fetchUsername("profile-name") as String
}
if objectAlreadyExist("target") {
targetBG?.text = fetchUsername("target") as String
}
if objectAlreadyExist("ratio") {
carbRatio?.text = fetchUsername("ratio") as String
}
if objectAlreadyExist("sensitivity") {
sensitivity?.text = fetchUsername("sensitivity") as String
}
if objectAlreadyExist("dr-email") {
doctorEmail!.text = fetchUsername("dr-email") as String
}
if objectAlreadyExist("dr-name") {
doctorName!.text = fetchUsername("dr-name") as String
}
if objectAlreadyExist("metric") {
switchAmerica!.on = (defaults?.boolForKey("metric"))!
}
if objectAlreadyExist("longBrand") {
longBrandField!.text = fetchUsername("longBrand") as String
longBrandLabel?.text = "\(fetchUsername("longBrand")) (units)"
}
if objectAlreadyExist("longUnits") {
if defaults?.objectForKey("longUnits") is String{
longUnits?.text = fetchUsername("longUnits") as String
}else{
longUnits!.text = "\(fetchDouble("longUnits"))"
}
}
if objectAlreadyExist("fastBrand") {
fastBrandField!.text = fetchUsername("fastBrand") as String
fastBrandLabel?.text = "\(fetchUsername("fastBrand")) (units)"
}
if objectAlreadyExist("fastUnits") {
fastUnits!.text = "\(fetchDouble("fastUnits"))"
}
if objectAlreadyExist("reminders") {
switchReminders?.setOn((defaults?.boolForKey("reminders"))!, animated: true)
}
if objectAlreadyExist("metric") {
switchAmerica?.setOn((defaults?.boolForKey("metric"))!, animated: true)
}
if objectAlreadyExist("round") {
switchAmerica?.setOn((defaults?.boolForKey("round"))!, animated: true)
}
if switchAmerica!.on == true {
targetBG?.placeholder = "7.8 mmol/L"
doctorEmail?.placeholder = "plumbottom@doctor.co.uk"
}else{
targetBG?.placeholder = "120 mg/dL"
doctorEmail?.placeholder = "doctor@dr-office.org"
}
name?.delegate = self
targetBG?.delegate = self
sensitivity?.delegate = self
carbRatio?.delegate = self
doctorName?.delegate = self
fastUnits?.delegate = self
longUnits?.delegate = self
longBrandField?.delegate = self
fastBrandField?.delegate = self
name?.nextField = targetBG
targetBG?.nextField = sensitivity
sensitivity?.nextField = carbRatio
carbRatio?.nextField = doctorName
doctorName?.nextField = doctorEmail
doctorEmail?.nextField = longBrandField
longBrandField?.nextField = fastBrandField
fastBrandField?.nextField = longUnits
longUnits?.nextField = fastUnits
highscore?.text = "\(defaults!.doubleForKey("highscore")) mg/dL"
lowscore?.text = "\(defaults!.doubleForKey("lowscore")) mg/dL"
}
func objectAlreadyExist(key: String) -> Bool {
return defaults!.objectForKey(key) != nil
}
func fetchImage(key: String) -> NSData {
return defaults!.dataForKey(key)!
}
func saveImage(key: String, data: UIImage) {
defaults!.setObject(UIImageJPEGRepresentation(data, 100), forKey: "profile-pic")
defaults!.synchronize()
}
func saveName(key: String, name: String) {
defaults!.setObject(name, forKey: "profile-name")
defaults!.synchronize()
}
func fetchUsername(key: String) -> NSString {
return defaults!.objectForKey(key)! as! NSString
}
func fetchDouble(key: String) -> Double{
return defaults!.doubleForKey(key)
}
func notifyNextOfKin() {
let nc = NSNotificationCenter.defaultCenter()
nc.postNotificationName("updateView", object: nil)
if (hud != nil) {
hud!.hide(true)
}
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.nextField?.becomeFirstResponder()
return true
}
@IBAction func america(sender: UISwitch){
defaults?.setBool(sender.on, forKey: "metric")
if sender.on == true {
targetBG?.placeholder = "7.8 mmol/L"
doctorEmail?.placeholder = "plumbottom@doctor.co.uk"
}else{
targetBG?.placeholder = "120 mg/dL"
doctorEmail?.placeholder = "doctor@dr-office.org"
}
defaults?.synchronize()
}
@IBAction func saveAll() {
if sensitivity?.text != "" {
defaults!.setObject(sensitivity?.text, forKey: "sensitivity")
}
if carbRatio?.text != "" {
defaults!.setObject(carbRatio?.text, forKey: "ratio")
}
if targetBG?.text != "" {
defaults!.setObject(targetBG?.text, forKey: "target")
}
if doctorEmail?.text != "" {
defaults!.setObject(doctorEmail?.text, forKey: "dr-email")
}
if doctorName?.text != "" {
defaults!.setObject(doctorName?.text, forKey: "dr-name")
}
if fastBrandField != nil && fastBrandField?.text != "" && fastBrandField?.text != nil {
defaults!.setObject(fastBrandField?.text, forKey: "fastBrand")
//defaults!.setDouble(Double((longBrandField?.text)!)!, forKey: "longBrand")
}
if longBrandField?.text != "" {
defaults!.setObject(longBrandField?.text, forKey: "longBrand")
}
if longUnits?.text != "" {
defaults!.setDouble(Double((longUnits?.text)!)!, forKey: "longUnits")
}
if fastUnits?.text != "" {
defaults!.setDouble(Double((fastUnits?.text)!)!, forKey: "fastUnits")
}
defaults?.setBool((switchReminders?.on)!, forKey: "reminders")
defaults?.setBool((switchRound?.on)!, forKey: "round")
for view in self.view.subviews {
if view is UITextField{
let field = view as! UITextField
field.resignFirstResponder()
}
}
self.view.endEditing(true)
discardButton?.enabled = true
defaults!.synchronize()
hud = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
dispatch_async(dispatch_get_main_queue()) {
self.notifyNextOfKin()
self.saveName("profile-name", name: (self.name?.text)!)
}
}
discardButton?.enabled = false
}
@IBAction func discardChanges(){
self.view.endEditing(true)
UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
if self.objectAlreadyExist("profile-name") {
self.name!.text = self.fetchUsername("profile-name") as String
}else{
self.name!.text = ""
}
if self.objectAlreadyExist("target") {
self.targetBG?.text = self.fetchUsername("target") as String
}else{
self.targetBG?.text = ""
}
if self.objectAlreadyExist("ratio") {
self.carbRatio?.text = self.fetchUsername("ratio") as String
}else{
self.carbRatio?.text = ""
}
if self.objectAlreadyExist("sensitivity") {
self.sensitivity?.text = self.fetchUsername("sensitivity") as String
}else{
self.sensitivity?.text = ""
}
if self.objectAlreadyExist("dr-email") {
self.doctorEmail!.text = self.fetchUsername("dr-email") as String
}else{
self.doctorEmail!.text = ""
}
if self.objectAlreadyExist("dr-name") {
self.doctorName!.text = self.fetchUsername("dr-name") as String
}else{
self.doctorName?.text = ""
}
if self.objectAlreadyExist("metric") {
self.switchAmerica!.on = (self.defaults?.boolForKey("metric"))!
}else{
self.switchAmerica!.on = false
}
if self.objectAlreadyExist("reminders") {
self.switchReminders?.setOn((self.defaults?.boolForKey("reminders"))!, animated: true)
}
if self.objectAlreadyExist("round") {
self.switchRound?.setOn((self.defaults?.boolForKey("round"))!, animated: true)
}
}, completion: nil)
discardButton?.enabled = false
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
func textFieldDidBeginEditing(textField: UITextField) {
discardButton?.enabled = true
}
}
private var kAssociationKeyNextField: UInt8 = 0
extension UITextField {
var nextField: UITextField? {
get {
return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
}
set(newField) {
objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, .OBJC_ASSOCIATION_RETAIN)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment