JCMoreResultViewController.swift 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. //
  2. // JCMoreResultViewController.swift
  3. // JChat
  4. //
  5. // Created by deng on 2017/5/8.
  6. // Copyright © 2017年 HXHG. All rights reserved.
  7. //
  8. import UIKit
  9. import JMessage
  10. class JCMoreResultViewController: UIViewController {
  11. var message: JMSGMessage?
  12. var fromUser: JMSGUser!
  13. weak var delegate: JCSearchResultViewController?
  14. var searchResultView: JCSearchResultViewController!
  15. var searchController: UISearchController!
  16. var users: [JMSGUser] = []
  17. var groups: [JMSGGroup] = []
  18. fileprivate var selectGroup: JMSGGroup!
  19. fileprivate var selectUser: JMSGUser!
  20. //MARK: - life cycle
  21. override func viewDidLoad() {
  22. super.viewDidLoad()
  23. _init()
  24. }
  25. override func viewDidAppear(_ animated: Bool) {
  26. super.viewDidAppear(animated)
  27. navigationController?.navigationBar.isHidden = true
  28. if searchController != nil {
  29. searchController.searchBar.isHidden = false
  30. }
  31. }
  32. override func viewDidDisappear(_ animated: Bool) {
  33. super.viewDidAppear(animated)
  34. navigationController?.navigationBar.isHidden = false
  35. }
  36. deinit {
  37. searchResultView.removeObserver(self, forKeyPath: "filteredUsersArray")
  38. searchResultView.removeObserver(self, forKeyPath: "filteredGroupsArray")
  39. }
  40. override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
  41. if keyPath == "filteredUsersArray" {
  42. users = searchResultView.filteredUsersArray
  43. }
  44. if keyPath == "filteredGroupsArray" {
  45. groups = searchResultView.filteredGroupsArray
  46. }
  47. tableView.reloadData()
  48. }
  49. fileprivate lazy var tableView: UITableView = {
  50. var tableView = UITableView(frame: CGRect(x: 0, y: 64, width: self.view.width, height: self.view.height - 64))
  51. tableView.delegate = self
  52. tableView.dataSource = self
  53. tableView.keyboardDismissMode = .onDrag
  54. tableView.register(JCContacterCell.self, forCellReuseIdentifier: "JCContacterCell")
  55. return tableView
  56. }()
  57. //MARK: - private func
  58. private func _init() {
  59. navigationController?.automaticallyAdjustsScrollViewInsets = false
  60. automaticallyAdjustsScrollViewInsets = false
  61. navigationController?.navigationBar.isHidden = true
  62. view.backgroundColor = UIColor(netHex: 0xe8edf3)
  63. view.addSubview(tableView)
  64. searchResultView.addObserver(self, forKeyPath: "filteredUsersArray", options: .new, context: nil)
  65. searchResultView.addObserver(self, forKeyPath: "filteredGroupsArray", options: .new, context: nil)
  66. }
  67. fileprivate func sendBusinessCard() {
  68. JCAlertView.bulid().setTitle("发送给:\(selectGroup.displayName())")
  69. .setMessage(fromUser!.displayName() + "的名片")
  70. .setDelegate(self)
  71. .addCancelButton("取消")
  72. .addButton("确定")
  73. .setTag(10003)
  74. .show()
  75. }
  76. fileprivate func forwardMessage(_ message: JMSGMessage) {
  77. let alertView = JCAlertView.bulid().setJMessage(message)
  78. .setDelegate(self)
  79. .setTag(10001)
  80. if selectUser == nil {
  81. alertView.setTitle("发送给:\(selectGroup.displayName())")
  82. } else {
  83. alertView.setTitle("发送给:\(selectUser.displayName())")
  84. }
  85. alertView.show()
  86. }
  87. }
  88. //Mark: -
  89. extension JCMoreResultViewController: UITableViewDelegate, UITableViewDataSource {
  90. public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  91. if users.count > 0 {
  92. return users.count
  93. }
  94. return groups.count
  95. }
  96. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  97. return 55
  98. }
  99. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  100. return tableView.dequeueReusableCell(withIdentifier: "JCContacterCell", for: indexPath)
  101. }
  102. func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
  103. guard let cell = cell as? JCContacterCell else {
  104. return
  105. }
  106. if users.count > 0 {
  107. cell.bindDate(users[indexPath.row])
  108. } else {
  109. cell.bindDateWithGroup(group: groups[indexPath.row])
  110. }
  111. }
  112. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  113. tableView.deselectRow(at: indexPath, animated: true)
  114. if users.count > 0 {
  115. let user = users[indexPath.row]
  116. selectUser = user
  117. if let message = message {
  118. forwardMessage(message)
  119. return
  120. }
  121. if fromUser != nil {
  122. sendBusinessCard()
  123. return
  124. }
  125. let vc: UIViewController
  126. if user.isEqual(to: JMSGUser.myInfo()) {
  127. vc = JCMyInfoViewController()
  128. } else {
  129. let v = JCUserInfoViewController()
  130. v.user = user
  131. vc = v
  132. }
  133. if searchController != nil {
  134. searchController.searchBar.resignFirstResponder()
  135. searchController.searchBar.isHidden = true
  136. }
  137. navigationController?.navigationBar.isHidden = false
  138. navigationController?.pushViewController(vc, animated: true)
  139. } else {
  140. let group = groups[indexPath.row]
  141. selectGroup = group
  142. if let message = message {
  143. forwardMessage(message)
  144. return
  145. }
  146. if fromUser != nil {
  147. sendBusinessCard()
  148. return
  149. }
  150. JMSGConversation.createGroupConversation(withGroupId: group.gid) { (result, error) in
  151. let conv = result as! JMSGConversation
  152. let vc = JCChatViewController(conversation: conv)
  153. NotificationCenter.default.post(name: NSNotification.Name(rawValue: kUpdateConversation), object: nil, userInfo: nil)
  154. if self.searchController != nil {
  155. self.searchController.searchBar.resignFirstResponder()
  156. self.searchController.searchBar.isHidden = true
  157. }
  158. self.navigationController?.navigationBar.isHidden = false
  159. self.navigationController?.pushViewController(vc, animated: true)
  160. }
  161. }
  162. }
  163. }
  164. extension JCMoreResultViewController: UIAlertViewDelegate {
  165. func alertView(_ alertView: UIAlertView, clickedButtonAt buttonIndex: Int) {
  166. if buttonIndex != 1 {
  167. return
  168. }
  169. switch alertView.tag {
  170. case 10001:
  171. if selectUser != nil {
  172. JMSGMessage.forwardMessage(message!, target: selectUser, optionalContent: JMSGOptionalContent.ex.default)
  173. } else {
  174. JMSGMessage.forwardMessage(message!, target: selectGroup, optionalContent: JMSGOptionalContent.ex.default)
  175. }
  176. case 10003:
  177. if selectUser != nil {
  178. JMSGConversation.createSingleConversation(withUsername: selectUser.username) { (result, error) in
  179. if let conversation = result as? JMSGConversation {
  180. let message = JMSGMessage.ex.createBusinessCardMessage(conversation, self.fromUser.username, self.fromUser.appKey ?? "")
  181. JMSGMessage.send(message, optionalContent: JMSGOptionalContent.ex.default)
  182. }
  183. }
  184. } else {
  185. let msg = JMSGMessage.ex.createBusinessCardMessage(gid: selectGroup.gid, userName: fromUser!.username, appKey: fromUser!.appKey ?? "")
  186. JMSGMessage.send(msg, optionalContent: JMSGOptionalContent.ex.default)
  187. }
  188. default:
  189. break
  190. }
  191. MBProgressHUD_JChat.show(text: "已发送", view: view, 2)
  192. let time: TimeInterval = 2
  193. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
  194. NotificationCenter.default.post(name: NSNotification.Name(rawValue: kReloadAllMessage), object: nil)
  195. }
  196. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time) { [weak self] in
  197. self?.delegate?.close()
  198. }
  199. }
  200. }