前回まで、ToDoListをMapに付与した〜みたいなアプリを作ろうか、という段階でしたが、急遽女性向けニュースキュレーション型のアプリの開発が入りました。
というところで、SlideMenuを使用しています。
基本的な使用方法は前回の記事であります。
そこで、SlideMenuで選択された物によってStatusを変更してmainViewに表示するコンテンツを捌く〜みたいなことをしなければならないケースに遭遇しました。
例えば、「政治」というSlideMenuのCell(TableView使います)をタップされたら、カテゴリー「政治」のコンテンツのみ表示する。という感じ。
MainViewController
... private func createLeftBarButton() -> UIBarButtonItem { let leftBarButton = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.didTapMenuIcon)) leftBarButton.image = UIImage(named: "ic_menu_img") return leftBarButton } @objc private func didTapMenuIcon() { if let leftMenuViewController: LeftMenuViewController = slideMenuController()?.leftViewController as? LeftMenuViewController { leftMenuViewController.delegate = self } self.slideMenuController()?.openLeft() } extension MainListViewController: StatusDelegate { func setStatus(status: String) { self.status = status // Statusによって変更したい何かしらの処理 self.mainListTableView.reloadData() self.mainListTableView.scrollsToTop = true self.slideMenuController()?.closeLeft() } }
LeftMenuViewController
// MARK: - UITableViewDelegate extension LeftMenuViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { switch indexPath.row { case 0: self.delegate?.setStatus(status: "ALL") case 1: self.delegate?.setStatus(status: "COSME") case 2: self.delegate?.setStatus(status: "HAIR") case 3: self.delegate?.setStatus(status: "BODY") case 4: self.delegate?.setStatus(status: "INCOME") default: self.delegate?.setStatus(status: "FAVORITE") } } }
うまくdelegateを使用すれば、LeftMenuViewControllerでのタップイベントをMainViewControllerで受けることができました。
というお話でした。
本気ではじめるiPhoneアプリ作り Xcode 9.x+Swift 4.x対応 (「ヤフー黒帯」シリーズ)
- 作者: 西磨翁
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/12/14
- メディア: 単行本
- この商品を含むブログを見る