Virgil_MenuChooseView.swift 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. //
  2. // Virgil_MenuChooseView.swift
  3. // sdjy
  4. //
  5. // Created by Virgil on 2018/6/15.
  6. // Copyright © 2018年 Virgil. All rights reserved.
  7. //
  8. import UIKit
  9. class Virgil_MenuChooseView: UIView, UITableViewDelegate, UITableViewDataSource {
  10. @IBOutlet weak var btnTemp: UIButton!
  11. @IBOutlet weak var tableView: UITableView!
  12. /*
  13. // Only override draw() if you perform custom drawing.
  14. // An empty implementation adversely affects performance during animation.
  15. override func draw(_ rect: CGRect) {
  16. // Drawing code
  17. }
  18. */
  19. private var defaultHeight: CGFloat = 0
  20. private var maxHeight: CGFloat = 0
  21. var arrSelectedIndex = [Int]()
  22. var defaultColor: UIColor = CommonUntils.getUIColorFromRGB(rgbValue: 0x323232, alpha: 1.0)
  23. var selectedColor: UIColor = CommonUntils.getUIColorFromRGB(rgbValue: 0x15BABC, alpha: 1.0)
  24. private var arrTitle = [String]()
  25. private var arrMenu = [[Virgil_MenuChooseModel]]()
  26. var backFunc: RebackFunction3!
  27. private var arrBtns = [UIButton]()
  28. ///arrTitle:标题 arrMenus:菜单列表 返回:选中第几列 第几项 选中菜单的名称
  29. func initView(arrTitles: [String], arrMenus: [[Virgil_MenuChooseModel]], funcBack:@escaping RebackFunction3) {
  30. backFunc = funcBack
  31. for str in arrTitles {
  32. arrTitle.append(str)
  33. }
  34. for temp in arrMenus {
  35. arrMenu.append(temp)
  36. }
  37. let width: CGFloat = self.frame.width / CGFloat(arrTitle.count)
  38. var left: CGFloat = 0
  39. for i in 0 ..< arrTitle.count {
  40. let btn = UIButton(frame: CGRect(x: left, y: 0, width: width, height: self.frame.height))
  41. btn.setTitle(arrTitle[i], for: .normal)
  42. btn.setTitleColor(defaultColor, for: .normal)
  43. btn.setTitleColor(selectedColor, for: .selected)
  44. btn.setImage(UIImage(named: "back_down"), for: .normal)
  45. btn.setImage(UIImage(named: "bavk_up"), for: .selected)
  46. left += width
  47. btn.setFontSize(fontSize: 14)
  48. btn.tag = i
  49. self.addSubview(btn)
  50. btn.setTitleImageLoction()
  51. btn.addTarget(self, action: #selector(btnMenuClick), for: .touchUpInside)
  52. btn.isSelected = false
  53. arrBtns.append(btn)
  54. arrSelectedIndex.append(0)
  55. }
  56. defaultHeight = self.frame.height
  57. tableView.marginTop(top: defaultHeight)
  58. tableView.isHidden = true
  59. tableView.register(UINib(nibName: "Virgil_MenuChooseTableViewCell", bundle: nil), forCellReuseIdentifier: "Virgil_MenuChooseTableViewCell")
  60. tableView.delegate = self
  61. tableView.dataSource = self
  62. tableView.separatorStyle = .none
  63. tableView.showsVerticalScrollIndicator = false
  64. tableView.delegate = self
  65. tableView.dataSource = self
  66. btnTemp.marginTop(top: defaultHeight)
  67. }
  68. var current = 0
  69. @objc func btnMenuClick(btn: UIButton) {
  70. current = btn.tag
  71. for btnTemp in arrBtns {
  72. if btnTemp.tag == btn.tag {
  73. btnTemp.isSelected = true
  74. } else {
  75. btnTemp.isSelected = false
  76. }
  77. }
  78. btnTemp.isHidden = false
  79. tableView.isHidden = false
  80. tableView.reloadData()
  81. maxHeight = self.superview!.frame.height - 80
  82. var dataHeight: CGFloat = CGFloat(self.arrMenu[current].count) * 50
  83. if maxHeight < dataHeight {
  84. dataHeight = maxHeight
  85. }
  86. self.setSizeHeight(height: self.superview!.frame.height)
  87. UIView.animate(withDuration: 0.2, animations: {
  88. self.btnTemp.alpha = 0.3
  89. self.tableView.setSizeHeight(height: dataHeight)
  90. }) { (_) in
  91. }
  92. }
  93. // MARK: TABLEVLEW 实现
  94. // MARK: TABLEVLEW 实现
  95. func numberOfSections(in tableView: UITableView) -> Int {
  96. return 1
  97. }
  98. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  99. return self.arrMenu[current].count
  100. }
  101. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  102. return 50
  103. }
  104. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  105. let cell = tableView.dequeueReusableCell(withIdentifier: "Virgil_MenuChooseTableViewCell", for: indexPath as IndexPath) as! Virgil_MenuChooseTableViewCell
  106. cell.lblTitle.text = arrMenu[current][indexPath.row].name
  107. if arrSelectedIndex[current] == indexPath.row {
  108. cell.imgRight.isHidden = false
  109. cell.lblTitle.textColor = CommonUntils.getUIColorFromRGB(rgbValue: 0x15B4B3, alpha: 1.0)
  110. } else {
  111. cell.lblTitle.textColor = CommonUntils.getUIColorFromRGB(rgbValue: 0x646464, alpha: 1.0)
  112. cell.imgRight.isHidden = true
  113. }
  114. //cell.lblTitle.text = getString(indexPath.row, key: "Name")
  115. return cell
  116. }
  117. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  118. arrSelectedIndex[current] = indexPath.row
  119. hidMenu()
  120. backFunc(current, indexPath.row, arrMenu[current][indexPath.row].name)
  121. }
  122. @IBAction func btnCloseClick(_ sender: Any) {
  123. hidMenu()
  124. }
  125. func hidMenu() {
  126. for btnTemp in arrBtns {
  127. btnTemp.isSelected = false
  128. }
  129. UIView.animate(withDuration: 0.2, animations: {
  130. self.tableView.setSizeHeight(height: 0)
  131. self.btnTemp.alpha = 0
  132. }) { (_) in
  133. self.tableView.isHidden = true
  134. self.btnTemp.isHidden = true
  135. self.setSizeHeight(height: self.defaultHeight)
  136. }
  137. }
  138. }