Created
November 12, 2016 03:12
-
-
Save 128keaton/ff0f674d05819e6b65992c101a3ada4e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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