import UIKit import RxSwift import RxCocoa class ContentsViewController: UIViewController, HideNavigationBarToggling { @IBOutlet var contentButtonViews: [ContentsButtonView]! @IBOutlet var contentListViews: [ContentListView]! private let disposeBag = DisposeBag() private var selectedPracticeName: String? private var selectedParam: MyContentViewParam? override func viewDidLoad() { super.viewDidLoad() hideListViews() //<<<<<<<<<<<<<< CRASH HERE!!!!!! contentsButtonController.setup(with: contentButtonViews) contentsButtonController.activeSelectionIndex .drive(onNext: { [weak self] in self?.hideListViews() self?.contentListViews[$0].isHidden = false }) .disposed(by: disposeBag) contentListViews.forEach { $0.selectedContent .emit(onNext: { [weak self] in self?.onSelected(with: $0) }) .disposed(by: disposeBag) } } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) contentListViews.forEach { $0.viewDidAppear.accept(()) } } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let providerVC = segue.destination as? AssociatedPracticeContentsViewController { providerVC.title = selectedPracticeName } else if let destinationNavigation = segue.destination as? KolibreeNavigationController, let bottomVC = destinationNavigation.visibleViewController as? BottomMessageViewController { let messageSegue = segue as? SwiftMessagesBottomTabSegue messageSegue?.interactiveHide = false bottomVC.titleString = selectedParam?.title ?? "" bottomVC.setup = { [weak self] bottomMessage in if let pdfReader = bottomMessage as? PDFReaderMessageView, let param = self?.selectedParam { pdfReader.load(param: param) } } } } private func hideListViews() { contentListViews.forEach { $0.isHidden = true } } private func onSelected(with cellType: ContentCellType) { switch cellType { case .myContent(let param): openContent(for: param) case .practice(let param): showAssociatedPracticeContents(for: param) default: return } } private func openContent(for param: MyContentViewParam) { switch param.type { case .book: selectedParam = param performSegue(withIdentifier: R.segue.contentsViewController.openPdfReaderSegue.identifier, sender: nil) case .video, .audio: let avContentPlayerVC = AVContentPlayerViewController() present(avContentPlayerVC, animated: true) { avContentPlayerVC.load(param: param) } default: return } } private func showAssociatedPracticeContents(for param: AssociatedPracticeViewParam) { SelectedAssociatedPracticeStorageAdapter().store(param.practiceId) selectedPracticeName = param.practiceName performSegue(withIdentifier: R.segue.contentsViewController.showAssociatedPracticeContents.identifier, sender: nil) } }