NewsDetailVC.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //
  2. // NewsDetailVC.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 06/04/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import UIKit
  9. import WebKit
  10. class NewsDetailVC: UIViewController {
  11. // Outlets
  12. @IBOutlet weak var wvNews: WKWebView!
  13. @IBOutlet weak var progressLoading: UIView!
  14. // Initialize
  15. private var presenter: NewsDetailPresenter!
  16. // Segue Id
  17. private let unwindToHomeSegueId = "unwindNewsDetailToHomeSegueId"
  18. private let unwindToNewsListSegueId = "unwindNewsDetailToNewsListSegueId"
  19. let SEGUE_HOME_ID = 21
  20. let SEGUE_NEWS_LIST_ID = 22
  21. // Constant
  22. private let alertNoConnectionTitle = "Informasi"
  23. private let alertNoConnectionMsg = "Sepertinya Anda sedang tidak tersambung pada koneksi internet"
  24. private let alertNoConnectionActionYes = "OK"
  25. // Public Variable, Use by Segue
  26. var newsId: Int = 0
  27. var segueId: Int = 0
  28. // Variables
  29. private var loading = false
  30. // View Lifecycles
  31. override var preferredStatusBarStyle: UIStatusBarStyle {
  32. return .lightContent
  33. }
  34. override func viewWillAppear(_ animated: Bool) {
  35. presenter.attachView(view: self)
  36. }
  37. override func viewDidLoad() {
  38. super.viewDidLoad()
  39. presenter = NewsDetailPresenter(siraniApiServices: SiraniApiServices())
  40. }
  41. override func viewDidAppear(_ animated: Bool) {
  42. loadData()
  43. }
  44. override func viewDidDisappear(_ animated: Bool) {
  45. presenter.detachView()
  46. }
  47. // private functions
  48. private func loadData() {
  49. if !loading {
  50. if ConnectionHelper.isConnectedToNetwork() {
  51. print("Load data \(newsId)")
  52. presenter.loadData(newsId: newsId)
  53. } else {
  54. showNoConnection()
  55. }
  56. }
  57. }
  58. // Actions
  59. @IBAction func onBtnBackTap(_ sender: Any) {
  60. if segueId == SEGUE_HOME_ID {
  61. performSegue(withIdentifier: unwindToHomeSegueId, sender: self)
  62. } else if segueId == SEGUE_NEWS_LIST_ID {
  63. performSegue(withIdentifier: unwindToNewsListSegueId, sender: self)
  64. }
  65. }
  66. }
  67. // NewsDetailViewDelegate
  68. extension NewsDetailVC: NewsDetailViewDelegate {
  69. func showNoConnection() {
  70. let alertNoConnection = UIAlertController(
  71. title: alertNoConnectionTitle,
  72. message: alertNoConnectionMsg,
  73. preferredStyle: .alert
  74. )
  75. alertNoConnection.addAction(
  76. UIAlertAction(title: alertNoConnectionActionYes, style: .default, handler: nil)
  77. )
  78. self.present(alertNoConnection, animated: true, completion: nil)
  79. }
  80. func showLoading() {
  81. loading = true
  82. progressLoading.show()
  83. }
  84. func hideLoading() {
  85. loading = false
  86. progressLoading.hide()
  87. }
  88. func setNewsDetail(newsDetail: NewsDetail) {
  89. var news = newsDetail.news
  90. news = news.replacingOccurrences(of: "&lt;", with: "<")
  91. news = news.replacingOccurrences(of: "&quot;", with: "\"")
  92. news = news.replacingOccurrences(of: "&amp;", with: "&")
  93. news = news.replacingOccurrences(of: "&apos;", with: "'")
  94. news = news.replacingOccurrences(of: "&gt;", with: ">")
  95. self.wvNews.loadHTMLString(news, baseURL: nil)
  96. }
  97. }