CommunityFollowViewController.swift 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  1. //
  2. // CommunityListViewController.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/6/11.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import JXSegmentedView
  10. import Kingfisher
  11. class CommunityFollowViewController: BaseViewController {
  12. override func didReceiveMemoryWarning() {
  13. super.didReceiveMemoryWarning()
  14. }
  15. deinit {
  16. NXLLog("deinit")
  17. if observe != nil {
  18. NotificationCenter.default.removeObserver(observe!)
  19. }
  20. }
  21. weak var observe : NSObjectProtocol?
  22. var navigationBarIsHidden: Bool = false
  23. var communityFollowDataModels : Array<CommunityFollowDataModel>?
  24. var communityFollowDataModel : CommunityFollowDataModel?
  25. /// 关注数组
  26. var cmsMemberModels : Array<CMSMemberModel>?
  27. override func viewDidLoad() {
  28. super.viewDidLoad()
  29. setupViews()
  30. setupLayouts()
  31. setupData()
  32. }
  33. override func setupViews() {
  34. navigationBar.isHidden = true
  35. view.backgroundColor = kf7f8faColor
  36. view.addSubview(tableView)
  37. }
  38. override func setupLayouts() {
  39. tableView.snp.makeConstraints { (make) in
  40. make.top.left.right.equalToSuperview()
  41. make.height.equalTo(kScreenHeight-48-kNavBarTotalHeight-kTabBarTotalHeight)
  42. }
  43. }
  44. private lazy var tableView: UITableView = {
  45. let tableView = UITableView(frame: CGRect.zero, style: UITableView.Style.grouped)
  46. tableView.separatorStyle = .none
  47. tableView.backgroundColor = kf7f8faColor
  48. tableView.dataSource = self
  49. tableView.delegate = self
  50. return tableView
  51. }()
  52. private lazy var followTableHeaderView: CommunityFollowTableHeaderView = {
  53. let followTableHeaderView = CommunityFollowTableHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 294))
  54. return followTableHeaderView
  55. }()
  56. private lazy var followLoginTableHeaderView: CommunityFollowLoginTableHeaderView = {
  57. let followLoginTableHeaderView = CommunityFollowLoginTableHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 40 + 155 * kScaleWidth))
  58. return followLoginTableHeaderView
  59. }()
  60. override func setupData() {
  61. //下拉刷新
  62. tableView.addHeader(withBeginRefresh: true, animation: true) {
  63. [weak self] (page) in
  64. self?.loadData(page:page)
  65. }
  66. tableView.addAutoNormalFooter(withAutomaticallyRefresh: true, loadMoreBlock: {
  67. [weak self] (page) in
  68. self?.communityFollowFeedApi(page: page)
  69. })
  70. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("login"), object: nil, queue: OperationQueue.main, using: {
  71. [weak self] (notification) in
  72. self?.tableView.mj_header.beginRefreshing()
  73. })
  74. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("loginOut"), object: nil, queue: OperationQueue.main, using: {
  75. [weak self] (notification) in
  76. self?.tableView.mj_header.beginRefreshing()
  77. })
  78. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("followApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  79. let followStatusModel = notification.object as? FollowStatusModel
  80. if !(self?.cmsMemberModels?.isEmpty ?? true) {
  81. for cmsMemberModel in (self?.cmsMemberModels)! {
  82. if cmsMemberModel.uid == followStatusModel?.uid {
  83. cmsMemberModel.followStatus = followStatusModel?.isFollowStatus
  84. }
  85. }
  86. }
  87. if !(self?.communityFollowDataModels?.isEmpty ?? true) {
  88. for communityFollowDataModel in (self?.communityFollowDataModels)! {
  89. if communityFollowDataModel.relateData?.uid == followStatusModel?.uid {
  90. communityFollowDataModel.relateData?.isFollow = followStatusModel?.isFollowStatus
  91. }
  92. }
  93. }
  94. self?.tableView.reloadData()
  95. }
  96. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("unlikeApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  97. let followStatusModel = notification.object as? FollowStatusModel
  98. if !(self?.communityFollowDataModels?.isEmpty ?? true) {
  99. for communityFollowDataModel in (self?.communityFollowDataModels)! {
  100. if communityFollowDataModel.relateData?.id == followStatusModel?.postId {
  101. communityFollowDataModel.relateData?.isDislike = followStatusModel?.isFollowStatus
  102. }
  103. }
  104. }
  105. self?.tableView.reloadData()
  106. }
  107. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("islikeApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  108. let followStatusModel = notification.object as? FollowStatusModel
  109. if !(self?.communityFollowDataModels?.isEmpty ?? true) {
  110. for communityFollowDataModel in (self?.communityFollowDataModels)! {
  111. if communityFollowDataModel.relateData?.id == followStatusModel?.postId {
  112. communityFollowDataModel.relateData?.isLike = followStatusModel?.isFollowStatus
  113. }
  114. }
  115. }
  116. self?.tableView.reloadData()
  117. }
  118. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("isCollectApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  119. let followStatusModel = notification.object as? FollowStatusModel
  120. if !(self?.communityFollowDataModels?.isEmpty ?? true) {
  121. for communityFollowDataModel in (self?.communityFollowDataModels)! {
  122. if communityFollowDataModel.relateData?.id == followStatusModel?.postId {
  123. communityFollowDataModel.relateData?.isCollect = followStatusModel?.isFollowStatus
  124. }
  125. }
  126. }
  127. self?.tableView.reloadData()
  128. }
  129. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("communityDeletePostApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  130. let postId = notification.object as? Int
  131. if !(self?.communityFollowDataModels?.isEmpty ?? true) {
  132. for (index,communityFollowDataModel) in (self?.communityFollowDataModels)!.enumerated() {
  133. if communityFollowDataModel.relateData?.id == postId {
  134. self?.communityFollowDataModels?.remove(at: index)
  135. }
  136. }
  137. self?.tableView.reloadData()
  138. }
  139. }
  140. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("CommunityModuleFollowTop"), object: nil, queue: OperationQueue.main, using: {
  141. [weak self] (notification) in
  142. if self?.tableView.contentOffset == CGPoint(x: 0, y: 0) {
  143. self?.tableView.mj_header.beginRefreshing()
  144. }else {
  145. self?.tableView.scrollToTop()
  146. }
  147. })
  148. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("PublishPostSuccess"), object: nil, queue: OperationQueue.main, using: {
  149. [weak self] (notification) in
  150. self?.tableView.mj_header.beginRefreshing()
  151. })
  152. }
  153. /// 显示键盘
  154. func showKeyBoardCommentView() {
  155. KeyBoardInputView.show(inputViewResultClosure: {
  156. [weak self] (text) in
  157. self?.communityPostCommentApi(text: text, complete: {
  158. self?.communityFollowDataModel = nil
  159. })
  160. }) {
  161. [weak self] in
  162. self?.communityFollowDataModel = nil
  163. }
  164. }
  165. }
  166. extension CommunityFollowViewController {
  167. /// 加载首页数据
  168. ///
  169. /// - Parameter page: <#page description#>
  170. func loadData(page:Int) {
  171. //获取系统存在的全局队列
  172. let queue = DispatchQueue.global(qos: .default)
  173. //定义一个group
  174. let group = DispatchGroup()
  175. //并发任务,顺序执行
  176. queue.async(group: group) { [weak self] in
  177. self?.cmsMemberListApi()
  178. }
  179. queue.async(group: group) { [weak self] in
  180. self?.communityFollowFeedApi(page: page)
  181. }
  182. }
  183. /// 获取关注用户列表
  184. func cmsMemberListApi() {
  185. SwiftMoyaNetWorkServiceCMS.shared().cmsMemberListApi(takeCount: 20,completion: {
  186. [weak self] (cmsMemberListModel) -> (Void) in
  187. let cmsMemberListModel = cmsMemberListModel as? CMSMemberListModel
  188. self?.cmsMemberModels = cmsMemberListModel?.list
  189. if UserModel.isTokenNil() {
  190. self?.tableView.tableHeaderView = self?.followLoginTableHeaderView
  191. MJRefreshManager.mjRefreshManager(tableView: self?.tableView)
  192. }
  193. self?.tableView.reloadData()
  194. }) {
  195. [weak self] (loadingStatus) in
  196. if UserModel.isTokenNil() {
  197. MJRefreshManager.mjRefreshManagerLoadingStatus(tableView: self?.tableView,loadingStatus: loadingStatus)
  198. }
  199. }
  200. }
  201. /// 关注feed流
  202. ///
  203. /// - Parameter page: 分页
  204. func communityFollowFeedApi(page:Int) {
  205. if !UserModel.isTokenNil() {
  206. SwiftMoyaNetWorkServiceCommunity.shared().communityFollowFeedApi(page:page,completion:{
  207. [weak self] (communityFollowFeedModel) -> (Void) in
  208. let communityFollowFeedModel = communityFollowFeedModel as? CommunityFollowFeedModel
  209. if communityFollowFeedModel?.pagination?.currentPage == 1{
  210. self?.communityFollowDataModels?.removeAll()
  211. self?.tableView.resetNoMoreData()
  212. }
  213. self?.communityFollowDataModels = (self?.communityFollowDataModels ?? Array<CommunityFollowDataModel>()) + (communityFollowFeedModel?.data ?? Array<CommunityFollowDataModel>())
  214. if self?.communityFollowDataModels?.isEmpty ?? true {
  215. self?.tableView.tableHeaderView = self?.followTableHeaderView
  216. }else {
  217. self?.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 0.000001))
  218. }
  219. self?.tableView.reloadData()
  220. MJRefreshManager.mjRefreshManagerPaginationNoHiddenFooter(tableView: self?.tableView, pagination: communityFollowFeedModel?.pagination)
  221. }) {
  222. [weak self] (loadingStatus) in
  223. MJRefreshManager.mjRefreshManagerLoadingStatus(tableView: self?.tableView,loadingStatus: loadingStatus)
  224. }
  225. }else{
  226. self.tableView.isHiddenFooter(true)
  227. MJRefreshManager.mjRefreshManager(tableView: self.tableView)
  228. }
  229. }
  230. /// 评论
  231. func communityPostCommentApi(text:String,complete:@escaping (() -> Void)) {
  232. let communityCustomCommnetModel = CommunityCustomCommnetModel()
  233. communityCustomCommnetModel.postId = self.communityFollowDataModel?.relateId ?? 0
  234. communityCustomCommnetModel.content = text
  235. SwiftMoyaNetWorkServiceCommunity.shared().communityPostCommentApi(communityCustomCommnetModel: communityCustomCommnetModel) {
  236. [weak self] (communityPostCommentIdModel) -> (Void) in
  237. let communityPostCommentIdModel = communityPostCommentIdModel as? CommunityPostCommentIdModel
  238. let communityFollowPostCommentModel = CommunityFollowPostCommentModel()
  239. communityFollowPostCommentModel.content = text
  240. communityFollowPostCommentModel.id = communityPostCommentIdModel?.id
  241. communityFollowPostCommentModel.username = UserModel.shared().getModel()?.username
  242. if self?.communityFollowDataModel?.relateData?.postComment?.isEmpty ?? true {
  243. self?.communityFollowDataModel?.relateData?.postComment = Array<CommunityFollowPostCommentModel>()
  244. }
  245. self?.communityFollowDataModel?.relateData?.postComment?.insert(communityFollowPostCommentModel, at: 0)
  246. VirusViewModel.shared.comment(communityFollowDataModel: self?.communityFollowDataModel, id: communityPostCommentIdModel?.id ?? 0,content: text)
  247. let count = 1 + (self?.communityFollowDataModel?.relateData?.commentCount ?? 0)
  248. self?.communityFollowDataModel?.relateData?.commentCount = count
  249. self?.tableView.reloadData()
  250. complete()
  251. }
  252. }
  253. /// 删除帖子
  254. func communityDeleteApi(postId:Int,section:Int) {
  255. SwiftMoyaNetWorkServiceCommunity.shared().communityDeleteApi(postId: postId) { [weak self] (data) -> (Void) in
  256. if !(self?.communityFollowDataModels?.isEmpty ?? true) {
  257. self?.communityFollowDataModels?.remove(at: section)
  258. }
  259. self?.tableView.reloadData()
  260. }
  261. }
  262. }
  263. extension CommunityFollowViewController : UITableViewDelegate,UITableViewDataSource {
  264. func numberOfSections(in tableView: UITableView) -> Int {
  265. if communityFollowDataModels?.isEmpty ?? true && cmsMemberModels?.isEmpty ?? true {
  266. return 0
  267. }else if communityFollowDataModels?.isEmpty ?? true && !(cmsMemberModels?.isEmpty ?? true) {
  268. return 1
  269. }else if !(communityFollowDataModels?.isEmpty ?? true) && (cmsMemberModels?.isEmpty ?? true){
  270. return (communityFollowDataModels?.isEmpty ?? true) ? 0 : communityFollowDataModels?.count ?? 0
  271. }else {
  272. return (communityFollowDataModels?.count ?? 0) + 1
  273. }
  274. }
  275. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  276. if (communityFollowDataModels?.isEmpty ?? true) && (cmsMemberModels?.isEmpty ?? true) {
  277. return 0
  278. }else if (communityFollowDataModels?.isEmpty ?? true) && !(cmsMemberModels?.isEmpty ?? true) {
  279. return 1
  280. }else if !(communityFollowDataModels?.isEmpty ?? true) && (cmsMemberModels?.isEmpty ?? true) {
  281. let communityFollowDataModel = communityFollowDataModels?[section]
  282. if CommunityFollowType(rawValue:communityFollowDataModel?.type ?? "1") == .post {
  283. return 6
  284. }else {
  285. return 1
  286. }
  287. }else {
  288. if section == 0 {
  289. return 1
  290. }else {
  291. let communityFollowDataModel = communityFollowDataModels?[section - 1]
  292. if CommunityFollowType(rawValue: communityFollowDataModel?.type ?? "1") == .post {
  293. return 6
  294. }else {
  295. return 1
  296. }
  297. }
  298. }
  299. }
  300. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  301. if (communityFollowDataModels?.isEmpty ?? true) && cmsMemberModels?.isEmpty ?? true {
  302. return UITableViewCell()
  303. }else if (communityFollowDataModels?.isEmpty ?? true) && !(cmsMemberModels?.isEmpty ?? true) { //推荐关注
  304. let cell = CommunityRecommendFollowTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  305. cell.type = .follow
  306. cell.cmsMemberModels = cmsMemberModels
  307. return cell
  308. }else if !(communityFollowDataModels?.isEmpty ?? true) && (cmsMemberModels?.isEmpty ?? true) { //关注列表
  309. let communityFollowDataModel = communityFollowDataModels?[indexPath.section]
  310. if CommunityFollowType(rawValue:communityFollowDataModel?.type ?? "1") == .post { //帖子
  311. return postCell(indexPath: indexPath,section:indexPath.section, communityFollowDataModel: communityFollowDataModel)
  312. }else { //关注
  313. let cell = CommunityFollowStatusTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  314. cell.followClosure = {
  315. [weak self] in
  316. CommunityFollowUserViewModel.shared.follow(communityFollowDataModel: communityFollowDataModel, communityFollowDataModels: (self?.communityFollowDataModels)!, tableView: (self?.tableView)!)
  317. }
  318. return cell
  319. }
  320. }else {
  321. if indexPath.section == 0 { //推荐关注
  322. let cell = CommunityRecommendFollowTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  323. cell.type = .follow
  324. cell.cmsMemberModels = cmsMemberModels
  325. cell.followClosure = {
  326. [weak self] (isFollow,cmsMemberModel) in
  327. for (_,model) in (self?.communityFollowDataModels?.enumerated())! {
  328. if model.relateData?.uid == cmsMemberModel.uid {
  329. model.relateData?.isFollow = isFollow
  330. tableView.reloadData()
  331. }
  332. }
  333. }
  334. return cell
  335. }else {//关注列表
  336. let communityFollowDataModel = communityFollowDataModels?[indexPath.section - 1]
  337. if CommunityFollowType(rawValue: communityFollowDataModel?.type ?? "1") == .post { //帖子
  338. return postCell(indexPath: indexPath,section: (indexPath.section - 1), communityFollowDataModel: communityFollowDataModel)
  339. }else {//关注
  340. let cell = CommunityFollowStatusTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  341. cell.communityFollowDataModel = communityFollowDataModel
  342. cell.followClosure = {
  343. [weak self] in
  344. CommunityFollowUserViewModel.shared.follow(communityFollowDataModel: communityFollowDataModel, communityFollowDataModels: (self?.communityFollowDataModels)!, tableView: (self?.tableView)!)
  345. }
  346. return cell
  347. }
  348. }
  349. }
  350. }
  351. func postCell(indexPath:IndexPath,section:Int,communityFollowDataModel:CommunityFollowDataModel?) -> UITableViewCell {
  352. switch indexPath.row {
  353. //贴子用户
  354. case 0:
  355. let cell = CardContentUserTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  356. cell.communityFollowDataModel = communityFollowDataModel
  357. cell.followClosure = {
  358. [weak self] in
  359. CommunityFollowUserViewModel.shared.follow(communityFollowDataModel: communityFollowDataModel, communityFollowDataModels: (self?.communityFollowDataModels)!, tableView: (self?.tableView)!)
  360. }
  361. cell.likeClosure = {
  362. [weak self] y in
  363. if UserModel.shared().isEqualUid(uid: communityFollowDataModel?.relateData?.uid ?? 0) {
  364. CardContentUserDeleteView.sheetDeleteView(y: y, sureClosure: { [weak self] (cardContentUserDeleteView) in
  365. self?.communityDeleteApi(postId: communityFollowDataModel?.relateData?.id ?? 0, section: section)
  366. })
  367. }else {
  368. VirusViewModel.shared.like(communityFollowDataModel: communityFollowDataModel, y: y, tableView: (self?.tableView)!)
  369. }
  370. }
  371. return cell
  372. //图片视频
  373. case 1:
  374. let cell = CardContentPicVideoTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  375. cell.type = .follow
  376. cell.communityFollowDataModel = communityFollowDataModel
  377. return cell
  378. //内容标题
  379. case 2:
  380. let cell = CardContentTitleTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  381. cell.communityFollowDataModel = communityFollowDataModel
  382. return cell
  383. //点赞,收藏,分享
  384. case 3:
  385. let cell = CardContentActionTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  386. cell.communityFollowDataModel = communityFollowDataModel
  387. cell.praiseClosureName = { [weak self] (button:UIButton) in
  388. VirusViewModel.shared.praise(communityFollowDataModel: communityFollowDataModel, tableView: (self?.tableView)!)
  389. }
  390. cell.collectClosureName = {
  391. [weak self] (button:UIButton) in
  392. VirusViewModel.shared.collection(communityFollowDataModel: communityFollowDataModel, tableView: (self?.tableView)!)
  393. }
  394. return cell
  395. //评论列表
  396. case 4:
  397. let cell = CardContentCommentListTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  398. cell.communityFollowDataModel = communityFollowDataModel
  399. cell.communityType = .follow
  400. return cell
  401. //评论
  402. case 5:
  403. let cell = CardContentCommnetTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  404. cell.addCommnetClosureName = {
  405. [weak self] in
  406. self?.communityFollowDataModel = communityFollowDataModel
  407. self?.showKeyBoardCommentView()
  408. }
  409. return cell
  410. default:
  411. return UITableViewCell()
  412. }
  413. }
  414. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  415. if (communityFollowDataModels?.isEmpty ?? true) && (cmsMemberModels?.isEmpty ?? true) {
  416. }else if (communityFollowDataModels?.isEmpty ?? true) && !(cmsMemberModels?.isEmpty ?? true) { //推荐关注
  417. }else if !(communityFollowDataModels?.isEmpty ?? true) && (cmsMemberModels?.isEmpty ?? true) { //关注列表
  418. let communityFollowDataModel = communityFollowDataModels?[indexPath.section]
  419. if CommunityFollowType(rawValue:communityFollowDataModel?.type ?? "1") == .post { //帖子
  420. switch indexPath.row {
  421. //贴子用户
  422. case 0:
  423. break
  424. //图片视频/内容标题/评论列表
  425. case 1,2,4:
  426. if PostType(rawValue: communityFollowDataModel?.relateData?.type ?? "video") == .video {
  427. NotificationCenter.default.post(name: NSNotification.Name("CommunityContentVideoClosure"), object: communityFollowDataModel?.relateData?.id)
  428. }else {
  429. NotificationCenter.default.post(name: NSNotification.Name("CommunityContentDetailClosure"), object: communityFollowDataModel?.relateData?.id)
  430. }
  431. break
  432. //点赞,收藏,分享
  433. case 3:
  434. break
  435. //评论
  436. case 5:
  437. break
  438. default:
  439. break
  440. }
  441. }else { //关注
  442. }
  443. }else {
  444. if indexPath.section == 0 { //推荐关注
  445. }else {//关注列表
  446. let communityFollowDataModel = communityFollowDataModels?[indexPath.section - 1]
  447. if CommunityFollowType(rawValue: communityFollowDataModel?.type ?? "1") == .post { //帖子
  448. switch indexPath.row {
  449. //贴子用户
  450. case 0:
  451. break
  452. //图片视频/内容标题/评论列表
  453. case 1,2,4:
  454. if PostType(rawValue: communityFollowDataModel?.relateData?.type ?? "video") == .video {
  455. NotificationCenter.default.post(name: NSNotification.Name("CommunityContentVideoClosure"), object: communityFollowDataModel?.relateData?.id)
  456. }else {
  457. NotificationCenter.default.post(name: NSNotification.Name("CommunityContentDetailClosure"), object: communityFollowDataModel?.relateData?.id)
  458. }
  459. break
  460. //点赞,收藏,分享
  461. case 3:
  462. break
  463. //评论
  464. case 5:
  465. break
  466. default:
  467. break
  468. }
  469. }else {//关注
  470. }
  471. }
  472. }
  473. }
  474. /// 状态的高度
  475. func followStatusHeight(communityFollowDataModel:CommunityFollowDataModel?) -> CGFloat {
  476. let communityFollowType = CommunityFollowType(rawValue: communityFollowDataModel?.type ?? "1")
  477. switch communityFollowType {
  478. case .follow?:
  479. return 160
  480. case .comment?:
  481. if communityFollowDataModel?.content?.beans == nil || communityFollowDataModel?.content?.beans ?? 0 <= 0 {
  482. return 193 - 28.5
  483. }
  484. return 193
  485. case .forward?,.like?,.collection?:
  486. if communityFollowDataModel?.content?.beans == nil || communityFollowDataModel?.content?.beans ?? 0 <= 0 {
  487. return 182 - 28.5
  488. }
  489. return 182
  490. default:
  491. return 0
  492. }
  493. }
  494. /// 帖子的高度
  495. func postCellHeight(indexPath:IndexPath,communityFollowDataModel:CommunityFollowDataModel?) -> CGFloat {
  496. switch indexPath.row {
  497. //贴子用户
  498. case 0:
  499. if communityFollowDataModel?.relateData?.uid != nil {
  500. return 80
  501. }
  502. return 0
  503. //图片视频
  504. case 1:
  505. let cardContentPicVideoModel = CardContentPicVideoModel()
  506. cardContentPicVideoModel.postType = PostType(rawValue: communityFollowDataModel?.relateData?.type ?? "image")!
  507. let imgStr = communityFollowDataModel?.relateData?.img
  508. if communityFollowDataModel?.relateData?.imgs?.isEmpty ?? true {
  509. if imgStr != "" && imgStr != nil {
  510. cardContentPicVideoModel.number = 1
  511. cardContentPicVideoModel.width = getImageWidth(imgStr: (imgStr)!)
  512. cardContentPicVideoModel.height = getImageHeight(imgStr: (imgStr)!)
  513. return cardContentPicVideoModel.collectionViewHeight() + 20
  514. }else {
  515. return 0
  516. }
  517. }else {
  518. if communityFollowDataModel?.relateData?.imgs?.count ?? 0 == 1 {
  519. if imgStr != "" || imgStr != nil {
  520. cardContentPicVideoModel.number = 1
  521. cardContentPicVideoModel.width = getImageWidth(imgStr: (imgStr)!)
  522. cardContentPicVideoModel.height = getImageHeight(imgStr: (imgStr)!)
  523. return cardContentPicVideoModel.collectionViewHeight() + 20
  524. }else {
  525. return 0
  526. }
  527. }else {
  528. cardContentPicVideoModel.number = communityFollowDataModel?.relateData?.imgs?.count ?? 0
  529. return cardContentPicVideoModel.collectionViewHeight() + 20
  530. }
  531. }
  532. //内容标题
  533. case 2:
  534. var str = communityFollowDataModel?.relateData?.content ?? ""
  535. str = str.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
  536. if (communityFollowDataModel?.relateData?.title == "" || communityFollowDataModel?.relateData?.title == nil) {
  537. if communityFollowDataModel?.relateData?.content?.count ?? 0 >= 45 {
  538. str = str.prefix(45) + "...更多"
  539. let contentHeight = "\(str)".heightForComment(font: kRegularFont14!, width: kScreenWidth-28)
  540. return contentHeight
  541. }else {
  542. let contentHeight = "\(str)".heightForComment(font: kRegularFont14!, width: kScreenWidth-28)
  543. return contentHeight
  544. }
  545. }else {
  546. if PostType(rawValue: communityFollowDataModel?.relateData?.type ?? "html") == .html {
  547. return 22
  548. }else {
  549. if communityFollowDataModel?.relateData?.content?.count ?? 0 >= 45 {
  550. str = str.prefix(45) + "...更多"
  551. let contentHeight = "\(str)".heightForComment(font: kRegularFont14!, width: kScreenWidth-28)
  552. return (22 + 6 + contentHeight)
  553. }else {
  554. let contentHeight = "\(str)".heightForComment(font: kRegularFont14!, width: kScreenWidth-28)
  555. return 22 + 6 + contentHeight
  556. }
  557. }
  558. }
  559. //点赞,收藏,分享
  560. case 3:
  561. return 54
  562. //评论列表
  563. case 4:
  564. if !(communityFollowDataModel?.relateData?.postComment?.isEmpty ?? true) {
  565. var height : CGFloat?
  566. for communityFollowPostCommentModel in (communityFollowDataModel?.relateData?.postComment!.prefix(2))! {
  567. let nameStr = "\(communityFollowPostCommentModel.username ?? ""):"
  568. let contentStr = "\(communityFollowPostCommentModel.content ?? "")"
  569. let str = nameStr + contentStr
  570. let strHeight = str.heightForComment(font: kRegularFont14!, width: kScreenWidth-28)
  571. height = (height ?? 0) + strHeight
  572. }
  573. if (communityFollowDataModel?.relateData?.commentCount ?? 0) <= 2 {
  574. return (height ?? 0)
  575. }else {
  576. return 23 + (height ?? 0)
  577. }
  578. }
  579. return 0
  580. //评论
  581. case 5:
  582. return 58
  583. default:
  584. return 0
  585. }
  586. }
  587. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  588. if (communityFollowDataModels?.isEmpty ?? true) && (cmsMemberModels?.isEmpty ?? true) {
  589. return 0
  590. }else if (communityFollowDataModels?.isEmpty ?? true) && !(cmsMemberModels?.isEmpty ?? true) {
  591. return 191
  592. }else if !(communityFollowDataModels?.isEmpty ?? true) && (cmsMemberModels?.isEmpty ?? true) {
  593. let communityFollowDataModel = communityFollowDataModels?[indexPath.section]
  594. if CommunityFollowType(rawValue:communityFollowDataModel?.type ?? "1") == .post {
  595. return postCellHeight(indexPath: indexPath, communityFollowDataModel: communityFollowDataModel)
  596. }else {
  597. return followStatusHeight(communityFollowDataModel: communityFollowDataModel)
  598. }
  599. }else if !(communityFollowDataModels?.isEmpty ?? true) && !(cmsMemberModels?.isEmpty ?? true) {
  600. if indexPath.section == 0 {
  601. return 191
  602. }else {
  603. let communityFollowDataModel = communityFollowDataModels?[indexPath.section - 1]
  604. if CommunityFollowType(rawValue: communityFollowDataModel?.type ?? "1") == .post {
  605. return postCellHeight(indexPath: indexPath, communityFollowDataModel: communityFollowDataModel)
  606. }else {
  607. return followStatusHeight(communityFollowDataModel: communityFollowDataModel)
  608. }
  609. }
  610. }else {
  611. return 0
  612. }
  613. }
  614. func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  615. switch section {
  616. case 0:
  617. if !(cmsMemberModels?.isEmpty ?? true) {
  618. return 62
  619. }
  620. return 0.000001
  621. default:
  622. return 0.000001
  623. }
  624. }
  625. func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
  626. switch section {
  627. case 0:
  628. if !(cmsMemberModels?.isEmpty ?? true) {
  629. return 20
  630. }
  631. return 10
  632. default:
  633. return 10
  634. }
  635. }
  636. func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  637. switch section {
  638. case 0:
  639. if !(cmsMemberModels?.isEmpty ?? true) {
  640. let headerView = CommunityCommonSectionHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 62))
  641. headerView.communityCommonSectionHeaderViewType = .recommendFollow
  642. return headerView
  643. }
  644. return nil
  645. default:
  646. return nil
  647. }
  648. }
  649. func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
  650. return nil
  651. }
  652. }
  653. extension CommunityFollowViewController {
  654. func scrollViewDidScroll(_ scrollView: UIScrollView) {
  655. let point = scrollView.panGestureRecognizer.translation(in: self.view)
  656. if point.y < 0 {
  657. //向上
  658. if communityNavigationBarIsHidden == false && communityIndex != 2 {
  659. NotificationCenter.default.post(name: NSNotification.Name("CommunityViewControllerScrollView"), object: true)
  660. tableView.snp.updateConstraints { (make) in
  661. make.height.equalTo(kScreenHeight-48-kSafeStatusBarHeight-kTabBarTotalHeight)
  662. }
  663. self.view.layoutIfNeeded()
  664. self.navigationBarIsHidden = true
  665. }
  666. } else {
  667. //向下
  668. if communityNavigationBarIsHidden && communityIndex != 2 {
  669. NotificationCenter.default.post(name: NSNotification.Name("CommunityViewControllerScrollView"), object: false)
  670. tableView.snp.updateConstraints { (make) in
  671. make.height.equalTo(kScreenHeight-48-kNavBarTotalHeight-kTabBarTotalHeight)
  672. }
  673. self.view.layoutIfNeeded()
  674. communityNavigationBarIsHidden = false
  675. }
  676. }
  677. }
  678. }
  679. extension CommunityFollowViewController : JXSegmentedListContainerViewListDelegate {
  680. func listView() -> UIView {
  681. return view
  682. }
  683. }