Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. //
  2. // CreateListController.swift
  3. // AppleShortcuts
  4. //
  5. // Created by Hassan El Desouky on 8/9/19.
  6. // Copyright © 2019 Hassan El Desouky. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import CoreData
  11.  
  12. protocol CreateListControllerDelegate: class {
  13. func didAddList(list: List)
  14. }
  15.  
  16. class CreateListController: UITableViewController {
  17.  
  18. @IBOutlet weak var doneBarButton: UIBarButtonItem!
  19. @IBOutlet weak var nameTextField: UITextField!
  20. lazy var iconImage: UIImageView = {
  21. let imgView = UIImageView()
  22. return imgView
  23. }()
  24. @IBOutlet weak var iconCellView: UIImageView!
  25. var chooseIconTapped = false
  26.  
  27. weak var delegate: CreateListControllerDelegate?
  28. var list: List?
  29.  
  30. override func viewDidLoad() {
  31. super.viewDidLoad()
  32. handleEmptyFields()
  33. }
  34.  
  35. override func viewWillAppear(_ animated: Bool) {
  36. super.viewWillAppear(animated)
  37. checkFields()
  38. setupEditingHistory()
  39. }
  40.  
  41. @IBAction func handleSave(_ sender: Any) {
  42. if list == nil {
  43. createList()
  44. } else {
  45. saveListChanges()
  46. }
  47. }
  48.  
  49. @IBAction func handleCancel(_ sender: Any) {
  50. dismiss(animated: true, completion: nil)
  51. }
  52.  
  53. @objc private func handleIcon(notification: Notification) {
  54. guard let iconDict = notification.userInfo else { return }
  55. guard let icon = iconDict["finalIcon"] as? UIImage else { return }
  56. iconImage.image = icon
  57. iconCellView.image = icon
  58. }
  59.  
  60. private func saveListChanges() {
  61. // TODO: Handle saving list changes
  62. }
  63.  
  64. private func createList() {
  65. let context = CoreDataManager.shared.persistentContainer.viewContext
  66. let list = NSEntityDescription.insertNewObject(forEntityName: "List", into: context)
  67. list.setValue(nameTextField.text, forKey: "name")
  68. if let firstColor = firstColorData {
  69. list.setValue(firstColor, forKey: "firstColor")
  70. }
  71. if let secondColor = secondColorData {
  72. list.setValue(secondColor, forKey: "secondColor")
  73. }
  74. if let image = iconImage.image {
  75. let imageData = image.jpegData(compressionQuality: 0.8)
  76. list.setValue(imageData, forKey: "imageData")
  77. iconCellView.image = UIImage(data: imageData!)
  78. }
  79. do {
  80. try context.save()
  81. dismiss(animated: true) {
  82. self.delegate?.didAddList(list: list as! List)
  83. }
  84. } catch {
  85. let nserror = error as NSError
  86. fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
  87. }
  88. }
  89.  
  90. private func handleEmptyFields() {
  91. doneBarButton.isEnabled = false
  92. nameTextField.delegate = self
  93. }
  94.  
  95. fileprivate func setupEditingHistory() {
  96. if list == nil {
  97. navigationItem.title = "Create List"
  98. NotificationCenter.default.addObserver(self, selector: #selector(handleIcon), name: NSNotification.Name(rawValue: "finalIcon"), object: nil)
  99. } else {
  100. navigationItem.title = "Edit List"
  101. nameTextField.text = list?.name
  102. if let image = list?.imageData {
  103. iconCellView.image = UIImage(data: image)
  104. }
  105. chooseIconTapped = true
  106. }
  107. }
  108.  
  109. fileprivate func checkFields() {
  110. if list != nil || chooseIconTapped && nameTextField.text!.count > 0 {
  111. doneBarButton.isEnabled = true
  112. }
  113. }
  114. }
  115.  
  116. extension CreateListController {
  117. override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  118. if indexPath.row == 1 {
  119. chooseIconTapped = true
  120. let iconController = storyboard?.instantiateViewController(withIdentifier: "ListIconController") as! ListIconController
  121. iconController.list = list
  122. navigationController?.pushViewController(iconController, animated: true)
  123. }
  124. }
  125. }
  126.  
  127. extension CreateListController: UITextFieldDelegate {
  128. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  129. let text = (nameTextField.text! as NSString).replacingCharacters(in: range, with: string)
  130. if text.isEmpty || !chooseIconTapped {
  131. doneBarButton.isEnabled = false
  132. } else {
  133. doneBarButton.isEnabled = true
  134. }
  135. return true
  136. }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement