CommunityFollowViewController.swift 30 KB

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