Advertisement
Guest User

Untitled

a guest
Jan 13th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 8.00 KB | None | 0 0
  1. //
  2. //  AddUpdateViewController.swift
  3. //  UserDetails
  4. //
  5. //  Created by Chandra Rao on 06/12/17.
  6. //  Copyright © 2017 Chandra Rao. All rights reserved.
  7. //
  8. import UIKit
  9. import CoreData
  10. class AddUpdateViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate, UITextFieldDelegate {
  11. @IBOutlet weak var imgUserImg: UIImageView!
  12. @IBOutlet weak var txtFieldName: UITextField!
  13. @IBOutlet weak var txtFieldEmail: UITextField!
  14. @IBOutlet weak var txtFieldOtherDetails: UITextField!
  15. @IBOutlet weak var btnSaveUpdate: UIButton!
  16. let imagePicker = UIImagePickerController()
  17. var tapGesture = UITapGestureRecognizer()
  18. var user: [NSManagedObject] = []
  19. var isUpdate : Bool = false
  20. var ctrVariable : Int = 0
  21. override func viewDidLoad() {
  22. super.viewDidLoad()
  23. // Do any additional setup after loading the view.
  24. imagePicker.delegate = self
  25. if isUpdate {
  26. txtFieldName.text = user[0].value(forKey: “name”) as? String
  27. txtFieldEmail.text = user[0].value(forKey: “email”) as? String
  28. txtFieldOtherDetails.text = user[0].value(forKey: “others”) as? String
  29. if let imageData = user[0].value(forKey: “image”) as? NSData {
  30. if let image = UIImage(data:imageData as Data) {
  31. imgUserImg.image = image
  32. }
  33. }
  34. btnSaveUpdate.setTitle(“Update”, for: UIControlState.normal)
  35. }
  36. }
  37. override func viewWillAppear(_ animated: Bool) {
  38. configureImageView()
  39. }
  40. override func touchesEnded(_ touches: Set, with event: UIEvent?) {
  41. view.endEditing(true)
  42. }
  43. override func didReceiveMemoryWarning() {
  44. super.didReceiveMemoryWarning()
  45. // Dispose of any resources that can be recreated.
  46. }
  47. // MARK: – Action Methods
  48. @IBAction func btnSaveUpdateClicked(_ sender: Any) {
  49. if check(forBlanks: txtFieldName) {
  50. showAlert(withTitleMessageAndAction: “Alert!, message: “Please enter valid text.” ,action: false)
  51. } else if check(forBlanks: txtFieldEmail) {
  52. showAlert(withTitleMessageAndAction: “Alert!, message: “Please enter valid text.”, action: false)
  53. } else if !check(forValidEmail: txtFieldEmail) {
  54. showAlert(withTitleMessageAndAction: “Alert!, message: “Please enter valid Email id.”, action: false)
  55. } else if check(forBlanks: txtFieldOtherDetails) {
  56. showAlert(withTitleMessageAndAction: “Alert!, message: “Please enter valid Text.”, action: false)
  57. } else {
  58. if isUpdate {
  59. updateRecord()
  60. } else {
  61. save(name: txtFieldName.text!, email: txtFieldEmail.text!, others: txtFieldOtherDetails.text!)
  62. }
  63. }
  64. }
  65. // MARK: – Database operation Methods
  66. func save(name: String , email: String, others: String) {
  67. guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
  68. return
  69. }
  70. ctrVariable = ctrVariable + 1
  71. let managedContext = appDelegate.persistentContainer.viewContext
  72. let entity = NSEntityDescription.entity(forEntityName: “User”, in: managedContext)!
  73. let userObj = NSManagedObject(entity: entity, insertInto: managedContext)
  74. userObj.setValue(ctrVariable, forKeyPath: “id”)
  75. userObj.setValue(name, forKeyPath: “name”)
  76. userObj.setValue(email, forKeyPath: “email”)
  77. userObj.setValue(others, forKeyPath: “others”)
  78. userObj.setValue(UIImageJPEGRepresentation(imgUserImg.image!, 1), forKey: “image”)
  79. do {
  80. try managedContext.save()
  81. user.append(userObj)
  82. showAlert(withTitleMessageAndAction: “Sucess!!, message: “Your record has been saved sucessfully!!, action: true)
  83. } catch let error as NSError {
  84. print(“Could not save. \(error), \(error.userInfo))
  85. }
  86. }
  87. func updateRecord() {
  88. guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
  89. return
  90. }
  91. let managedContext = appDelegate.persistentContainer.viewContext
  92. let fetchRequest:NSFetchRequest = NSFetchRequest.init(entityName: “User”)
  93. let predicate = NSPredicate(format: “id == ‘\(user[0].value(forKey: “id”) as! Int)'”)
  94. fetchRequest.predicate = predicate
  95. do{
  96. let test = try managedContext.fetch(fetchRequest)
  97. if test.count == 1
  98. {
  99. let objectUpdate = test[0] as! NSManagedObject
  100. objectUpdate.setValue((user[0].value(forKey: “id”) as! Int), forKeyPath: “id”)
  101. objectUpdate.setValue(txtFieldName.text!, forKey: “name”)
  102. objectUpdate.setValue(txtFieldEmail.text!, forKey: “email”)
  103. objectUpdate.setValue(txtFieldOtherDetails.text!, forKeyPath: “others”)
  104. objectUpdate.setValue(UIImageJPEGRepresentation(imgUserImg.image!, 1), forKey: “image”)
  105. do {
  106. try managedContext.save()
  107. showAlert(withTitleMessageAndAction: “Sucess!!, message: “Your record has been updated sucessfully!!, action: true)
  108. } catch let error as NSError {
  109. print(“Could not save. \(error), \(error.userInfo))
  110. }
  111. }
  112. }
  113. catch{
  114. print(error)
  115. }
  116. }
  117. // MARK: – UIGestureRecognizerDelegate Methods
  118. @objc func handleTap(_ sender: UITapGestureRecognizer) {
  119. let alertController = UIAlertController(title: “Alert!, message: “PLease choose source.”, preferredStyle:UIAlertControllerStyle.actionSheet)
  120. alertController.addAction(UIAlertAction(title: “Camera”, style: UIAlertActionStyle.default)
  121. { action -> Void in
  122. // Put your code here
  123. if UIImagePickerController.isSourceTypeAvailable(.camera) {
  124. self.imagePicker.delegate = self
  125. self.imagePicker.sourceType = .camera;
  126. self.imagePicker.allowsEditing = false
  127. self.present(self.imagePicker, animated: true, completion: nil)
  128. } else {
  129. self.showAlert(withTitleMessageAndAction: “Alert!, message: “Camera not available.”, action: false)
  130. }
  131. })
  132. alertController.addAction(UIAlertAction(title: “Photo Library”, style: UIAlertActionStyle.default)
  133. { action -> Void in
  134. self.imagePicker.allowsEditing = true
  135. self.imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
  136. self.present(self.imagePicker, animated: true) {
  137. }
  138. })
  139. self.present(alertController, animated: true) {
  140. }
  141. }
  142. // MARK: – UIImagePickerControllerDelegate Methods
  143. private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
  144. {
  145. let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage //2
  146. imgUserImg.contentMode = .scaleAspectFit
  147. imgUserImg.image = chosenImage
  148. dismiss(animated:true, completion: nil)
  149. }
  150. func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
  151. if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
  152. imgUserImg.image = image
  153. dismiss(animated: true, completion: nil)
  154. }
  155. }
  156. func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
  157. }
  158. // MARK: – Other Methods.
  159. func check(forBlanks textfield: UITextField) -> Bool {
  160. let rawString: String? = textfield.text
  161. let whitespace = CharacterSet.whitespacesAndNewlines
  162. let trimmed: String? = rawString?.trimmingCharacters(in: whitespace)
  163. if (trimmed?.count ?? 0) == 0 {
  164. return true
  165. }
  166. else {
  167. return false
  168. }
  169. }
  170. func check(forValidEmail textfield: UITextField) -> Bool {
  171. let emailRegEx = “[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}
  172. let emailTest = NSPredicate(format:“SELF MATCHES %@”, emailRegEx)
  173. print(emailTest.evaluate(with: textfield.text!))
  174. return emailTest.evaluate(with: textfield.text!)
  175. }
  176. func showAlert(withTitleMessageAndAction title:String, message:String , action: Bool) {
  177. let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
  178. if action {
  179. alert.addAction(UIAlertAction(title: “Ok”, style: .default, handler: { (action : UIAlertAction!) in
  180. self.navigationController?.popViewController(animated: true)
  181. }))
  182. } else{
  183. alert.addAction(UIAlertAction(title: “Ok”, style: .default, handler: nil))
  184. }
  185. self.present(alert, animated: true, completion: nil)
  186. }
  187. func configureImageView() {
  188. imgUserImg.layer.cornerRadius = imgUserImg.frame.size.width / 2
  189. imgUserImg.layer.borderWidth = 3.0
  190. imgUserImg.layer.borderColor = UIColor.lightGray.cgColor
  191. tapGesture = UITapGestureRecognizer(target: self, action: #selector(AddUpdateViewController.handleTap(_:)))
  192. tapGesture.delegate = self
  193. tapGesture.numberOfTapsRequired = 1
  194. tapGesture.numberOfTouchesRequired = 1
  195. imgUserImg.addGestureRecognizer(tapGesture)
  196. }
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement