IHAreaSeachView.swift 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. //
  2. // IHAreaSeachView.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2019/12/27.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. protocol IHAreaSearchViewDelegate : NSObjectProtocol{
  10. func searchViewDidSelectRowAt(indexPath: IndexPath)
  11. }
  12. class IHAreaSeachView: UIView {
  13. weak var viewDelegate : IHAreaSearchViewDelegate?
  14. var target : UIViewController?
  15. var roomList : [RoomData]? {
  16. didSet{
  17. self.tableView.reloadData()
  18. }
  19. }
  20. var fillterResult :[RoomData]?{
  21. didSet{
  22. self.tableView.reloadData()
  23. }
  24. }
  25. // MARK: - Cancel Button 取消按钮
  26. public var showCancelButtonWhileEditing: Bool = false
  27. var searchController : UISearchController?
  28. lazy var tableView: UITableView = {
  29. let tableView = UITableView(frame: CGRect.zero, style: .plain)
  30. tableView.delegate = self
  31. tableView.dataSource = self
  32. tableView.backgroundColor = UIColor(hexString: "#F6F8F7")
  33. tableView.separatorStyle = .none
  34. // tableView.register(UINib(nibName: "IHAreaListCell", bundle: nil), forCellReuseIdentifier: "cell")
  35. return tableView
  36. }()
  37. override init(frame: CGRect) {
  38. super.init(frame: frame)
  39. addSubview(tableView)
  40. settingSerachController()
  41. }
  42. override func layoutSubviews() {
  43. super.layoutSubviews()
  44. self.tableView.frame = self.bounds
  45. }
  46. required init?(coder: NSCoder) {
  47. fatalError("init(coder:) has not been implemented")
  48. }
  49. func settingSerachController() {
  50. //传nil 搜索代码在当前界面
  51. searchController = UISearchController(searchResultsController: nil)
  52. searchController?.searchResultsUpdater = self
  53. searchController?.searchBar.frame = CGRect(x: 0, y: 0, width: 0, height: 44)
  54. searchController?.dimsBackgroundDuringPresentation = false
  55. searchController?.hidesNavigationBarDuringPresentation = true
  56. searchController?.obscuresBackgroundDuringPresentation = false
  57. searchController?.searchBar.sizeToFit()
  58. searchController?.searchBar.delegate = self
  59. searchController?.delegate = self
  60. //target?.navigationItem.searchController = searchController
  61. target?.definesPresentationContext = true
  62. tableView.tableHeaderView = searchController?.searchBar
  63. setSearchBar()
  64. }
  65. ///设置searchbar
  66. func setSearchBar() {
  67. //获取searchbar
  68. let searchBar = searchController?.searchBar
  69. searchBar?.barStyle = .default
  70. //获取searchBar 的search
  71. let searchField = searchBar?.value(forKey: "searchField") as? UITextField
  72. if searchField == nil {
  73. return
  74. }
  75. //文本框字体颜色
  76. searchField?.font = UIFont(name: PingFangSC_Regular, size: 14)
  77. searchField?.textColor = UIColor(hexString: "#333333")
  78. ///文本框文字颜色
  79. let holderText = "请输入房间号"
  80. let placeholder = NSMutableAttributedString(string: holderText)
  81. placeholder.addAttributes([NSAttributedString.Key.foregroundColor : UIColor(hexString: "#C6CDD5") as Any], range: NSRange(location: 0, length: holderText.count))
  82. placeholder.addAttributes([NSAttributedString.Key.font : UIFont(name: Alibaba_PuHuiTi_Regular, size: 14) as Any], range: NSRange(location: 0, length: holderText.count))
  83. searchField?.attributedPlaceholder = placeholder
  84. //设置文本框背景
  85. searchField?.backgroundColor = UIColor(hexString: "#F6F8F7")
  86. //隐藏搜索框的上下两条黑线
  87. searchBar?.backgroundImage = UIImage()
  88. //搜索框背景颜色
  89. searchBar?.barTintColor = UIColor(hexString: "#F6F8F7")
  90. searchBar?.tintColor = UIColor(hexString: "#657085")
  91. }
  92. ///设置取消按钮
  93. ///过滤
  94. func filterContent(for searchText:String) {
  95. let _roomlist = self.roomList
  96. let room_number = searchText
  97. var fillterRoomNS : [RoomData]
  98. if room_number == "" || _roomlist == nil || _roomlist?.count == 0 { //没有输入则为传入的内容
  99. fillterRoomNS = _roomlist!
  100. }else{
  101. fillterRoomNS = (_roomlist?.filter({ (newRoom) -> Bool in
  102. let number = newRoom.number!
  103. let search = searchText.lowercased()
  104. return number.contains(search) == true
  105. }))!
  106. }
  107. fillterResult = fillterRoomNS
  108. }
  109. }
  110. extension IHAreaSeachView :UITableViewDataSource,UITableViewDelegate{
  111. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  112. if searchController?.isActive == true {
  113. return self.fillterResult?.count ?? 0
  114. }else{
  115. return self.roomList?.count ?? 0
  116. }
  117. }
  118. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  119. //这里要判断是学校还是酒店
  120. let room = searchController?.isActive == true ? self.fillterResult![indexPath.row] : self.roomList![indexPath.row]
  121. var cell : IHAreaListCell?
  122. if room.type == "1"{
  123. ////学校 ClassRoom
  124. cell = tableView.dequeueReusableCell(withIdentifier: "ClassRoom") as? IHAreaListCell
  125. if cell == nil{
  126. cell = Bundle.main.loadNibNamed("IHAreaListCell", owner: nil, options: nil)?.last as? IHAreaListCell
  127. }
  128. }else{
  129. //酒店
  130. cell = tableView.dequeueReusableCell(withIdentifier: "cell") as? IHAreaListCell
  131. if cell == nil{
  132. cell = Bundle.main.loadNibNamed("IHAreaListCell", owner: nil, options: nil)?.first as? IHAreaListCell
  133. }
  134. }
  135. cell?.selectionStyle = .none
  136. cell?.room = room
  137. return cell!
  138. }
  139. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  140. return 150
  141. }
  142. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  143. // self.endEditing(true)
  144. searchController?.isActive = false
  145. if let delegate = viewDelegate {
  146. delegate.searchViewDidSelectRowAt(indexPath: indexPath)
  147. }
  148. }
  149. }
  150. extension IHAreaSeachView : UISearchResultsUpdating,UISearchBarDelegate,UISearchControllerDelegate{
  151. func updateSearchResults(for searchController: UISearchController) {
  152. for view in searchController.searchBar.subviews{
  153. log.debug("view = \(view)")
  154. for sub in view.subviews[0].subviews {
  155. log.debug("sub \(sub)")
  156. }
  157. }
  158. if let searchText = searchController.searchBar.text {
  159. filterContent(for: searchText)
  160. }
  161. }
  162. func didPresentSearchController(_ searchController: UISearchController) {
  163. log.debug("self.tableView.frame - \(self.tableView.frame)")
  164. showCancelButtonWhileEditing = true
  165. }
  166. func willDismissSearchController(_ searchController: UISearchController) {
  167. log.debug("self.tableView.frame - \(self.tableView.frame)")
  168. showCancelButtonWhileEditing = false
  169. }
  170. }