RxDataSourcesを利用してeditActionsForRowAt機能を実現する(後)


この前の記事「RxDataSourcesを利用してeditActionsForRowAt機能を実現する」
の追記として、今度は、checkEditの条件判断を実現する案について、述べたいと思う。

色々、インタネット上の記事を調べてみたが、やっぱり、tableViewのCell毎に条件判断に使われる変数を定義して、判断に使うのが、実現しやすいことではないかと思って実装して見た。

1. まず、EventCellのファイルでviewModelを変数を定義する
EventCell.swift

class EventCell: UITableViewCell {

private var viewModel = EventCellViewModel() {
        didSet {
            self.updateUI(viewModel: viewModel) // viewModel更新があるとUI更新を行う
        }
    }
//... ...
   override func awakeFromNib() {
        super.awakeFromNib()
    }
//... ...
}
2. EventCellのviewModel設定、取得メソットを実装する
EventCell.swift
extension EventCell {
    public func configure(viewModel: EventCellViewModel) {
        self.viewModel = viewModel
    }

    public func getViewModel() -> EventCellViewModel {
        return viewModel
    }
}
3. ViewControllerのtableview DelegateメソットeditActionsForRowAt()に以下の様実装する
EventListViewController.swift
override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
       guard let cell = tableView.cellForRow(at: indexPath) as? EventCell else {
            return []
        }
      let viewModel = cell.getViewModel()
        guard viewModel.event.canEditable else {
            return [] // can't edit
        }
       //... ...
       // ここからはActionを実装登録して置く

}

以上、簡単な工夫になりますが、参考にいただけると、大変ありがたいです〜〜

iOS、Androidアプリの制作なら、https://origon.co.jp にお任せください
信頼且つ満足できる製品を納品いたします