怠慢プログラマーの備忘録

怠慢でナマケモノなプログラマーの備忘録です。

SlideMenuでMainViewControllerのStatusやらを変える

前回まで、ToDoListをMapに付与した〜みたいなアプリを作ろうか、という段階でしたが、急遽女性向けニュースキュレーション型のアプリの開発が入りました。

というところで、SlideMenuを使用しています。

yutaabe200.hatenablog.com

基本的な使用方法は前回の記事であります。

そこで、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で受けることができました。

というお話でした。