JCFeedbackViewController.swift 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. //
  2. // JCFeedbackViewController.swift
  3. // JChat
  4. //
  5. // Created by deng on 2017/3/16.
  6. // Copyright © 2017年 HXHG. All rights reserved.
  7. //
  8. import UIKit
  9. import YHPhotoKit
  10. class JCFeedbackViewController: UIViewController {
  11. override func viewDidLoad() {
  12. super.viewDidLoad()
  13. _init()
  14. }
  15. fileprivate lazy var images: [UIImage] = []
  16. private var topOffset: CGFloat {
  17. if isIPhoneX {
  18. return 88
  19. }
  20. return 64
  21. }
  22. private lazy var bgView: UIView = UIView(frame: CGRect(x: 0, y: self.topOffset, width: self.view.width, height: 180))
  23. private lazy var textView: UITextView = {
  24. var textView = UITextView(frame: CGRect(x: 15, y: 12, width: self.view.width - 30, height: 65))
  25. textView.delegate = self
  26. textView.text = self.placeholder
  27. textView.font = UIFont.systemFont(ofSize: 16)
  28. textView.textColor = self.placeholderColor
  29. return textView
  30. }()
  31. fileprivate lazy var tipLabel: UILabel = {
  32. var tipLabel = UILabel(frame: CGRect(x: self.view.width - 60 - 15 , y: 82.5, width: 60, height: 16.5))
  33. tipLabel.textAlignment = .right
  34. tipLabel.textColor = UIColor(netHex: 0x999999)
  35. tipLabel.font = UIFont.systemFont(ofSize: 16)
  36. tipLabel.text = "300";
  37. return tipLabel
  38. }()
  39. private lazy var sendButton: UIButton = {
  40. var sendButton = UIButton(frame: CGRect(x: 15, y: self.topOffset + 180 + 20, width: self.view.width - 30, height: 40))
  41. let image = UIImage.createImage(color: UIColor(netHex: 0x2dd0cf),
  42. size: CGSize(width: self.view.width - 30, height: 40))
  43. sendButton.setBackgroundImage(image, for: .normal)
  44. sendButton.layer.cornerRadius = 3.0
  45. sendButton.layer.masksToBounds = true
  46. sendButton.setTitle("提交", for: .normal)
  47. sendButton.addTarget(self, action: #selector(_sendFeedBack), for: .touchUpInside)
  48. return sendButton
  49. }()
  50. fileprivate lazy var photoBar: JCPhotoBar = JCPhotoBar(frame: CGRect(x: 0, y: 105, width: self.view.width, height: 65))
  51. fileprivate let placeholder = "请输入您的问题和意见,感谢您的使用。"
  52. fileprivate let placeholderColor = UIColor(netHex: 0x999999)
  53. //MARK: - private func
  54. private func _init() {
  55. self.title = "意见反馈"
  56. view.backgroundColor = UIColor(netHex: 0xe8edf3)
  57. let tap = UITapGestureRecognizer(target: self, action: #selector(_tapView))
  58. view.addGestureRecognizer(tap)
  59. photoBar.delegate = self
  60. photoBar.bindData([])
  61. bgView.backgroundColor = .white
  62. bgView.addSubview(tipLabel)
  63. bgView.addSubview(textView)
  64. bgView.addSubview(photoBar)
  65. view.addSubview(bgView)
  66. view.addSubview(sendButton)
  67. }
  68. @objc func _sendFeedBack() {
  69. if textView.text == placeholder && images.count == 0 {
  70. MBProgressHUD_JChat.show(text: "反馈内容不能为空", view: view)
  71. return
  72. }
  73. if !textView.text.isEmpty && textView.text != placeholder {
  74. let content = JMSGTextContent(text: textView.text)
  75. let message = JMSGMessage.createSingleMessage(with: content, username: "feedback_ios")
  76. JMSGMessage.send(message, optionalContent: JMSGOptionalContent.ex.default)
  77. }
  78. images.forEach { (image) in
  79. let content = JMSGImageContent(imageData: image.jpegData(compressionQuality: 1)!)
  80. let message = JMSGMessage.createSingleMessage(with: content!, username: "feedback_ios")
  81. JMSGMessage.send(message, optionalContent: JMSGOptionalContent.ex.default)
  82. }
  83. JMSGConversation.deleteSingleConversation(withUsername: "feedback_ios")
  84. view.endEditing(true)
  85. JCAlertView.bulid().setDelegate(self).setTitle("提交成功").setMessage("感谢您的反馈,我们将持续为您改进").addButton("确定").setTag(1001).show()
  86. }
  87. @objc func _tapView() {
  88. view.endEditing(true)
  89. }
  90. }
  91. extension JCFeedbackViewController: JCPhotoBarDelegate {
  92. private func _pushToSelectPhotos() {
  93. let photoPicker = YHPhotoPickerViewController()
  94. photoPicker.pickerDelegate = self
  95. let count = 4 - images.count
  96. photoPicker.maxPhotosCount = Int32(count)
  97. present(photoPicker, animated: true)
  98. }
  99. func photoBarAddImage() {
  100. if PHPhotoLibrary.authorizationStatus() != .authorized {
  101. PHPhotoLibrary.requestAuthorization({ (status) in
  102. DispatchQueue.main.sync {
  103. if status != .authorized {
  104. let alertView = UIAlertView(title: "无权限访问照片", message: "请在设备的设置-极光 IM中允许访问照片。", delegate: self, cancelButtonTitle: "好的", otherButtonTitles: "去设置")
  105. alertView.show()
  106. } else {
  107. self._pushToSelectPhotos()
  108. }
  109. }
  110. })
  111. } else {
  112. _pushToSelectPhotos()
  113. }
  114. }
  115. func photoBarClickImage(index: Int) {
  116. let browserImageVC = JCImageBrowserViewController()
  117. browserImageVC.imageArr = images
  118. browserImageVC.imgCurrentIndex = index
  119. present(browserImageVC, animated: true) {}
  120. }
  121. func photoBarDeleteImage(index: Int) {
  122. images.remove(at: index)
  123. photoBar.bindData(images)
  124. }
  125. }
  126. extension JCFeedbackViewController: YHPhotoPickerViewControllerDelegate {
  127. func selectedPhotoBeyondLimit(_ count: Int32, currentView view: UIView!) {
  128. MBProgressHUD_JChat.show(text: "最多选择\(count)张图片", view: nil)
  129. }
  130. func yhPhotoPickerViewController(_ PhotoPickerViewController: YHSelectPhotoViewController!, selectedPhotos photos: [Any]!) {
  131. for image in photos as! [UIImage] {
  132. images.append(image)
  133. }
  134. photoBar.bindData(images)
  135. }
  136. }
  137. extension JCFeedbackViewController: UITextViewDelegate {
  138. func textViewDidBeginEditing(_ textView: UITextView) {
  139. if textView.text == placeholder {
  140. textView.textColor = .black
  141. textView.text = ""
  142. }
  143. }
  144. func textViewDidEndEditing(_ textView: UITextView) {
  145. if textView.text.characters.count <= 0 {
  146. textView.text = placeholder
  147. textView.textColor = placeholderColor
  148. tipLabel.text = "300"
  149. }
  150. }
  151. func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
  152. if text == "\n" {
  153. return false
  154. }
  155. return true
  156. }
  157. func textViewDidChange(_ textView: UITextView) {
  158. if textView.markedTextRange == nil {
  159. let text = textView.text!
  160. if text.count > 300 {
  161. let range = (text.startIndex ..< text.index(text.startIndex, offsetBy: 300))
  162. let subText = text.substring(with: range)
  163. textView.text = subText
  164. }
  165. let count = 300 - (textView.text?.count)!
  166. tipLabel.text = "\(count)"
  167. }
  168. }
  169. }
  170. extension JCFeedbackViewController: UIAlertViewDelegate {
  171. func alertView(_ alertView: UIAlertView, clickedButtonAt buttonIndex: Int) {
  172. if alertView.tag == 1001 {
  173. navigationController?.popViewController(animated: true)
  174. return
  175. }
  176. if buttonIndex == 1 {
  177. JCAppManager.openAppSetter()
  178. }
  179. }
  180. }