複数選択できるUITableViewを実装する(Swift)

More than 1 year has passed since last update.


概要

UITableViewはCellの複数選択をサポートしています。

ここではその簡単な実装例を紹介します。


スクリーンショット


ソースコード

UITableViewはStoryboard側で追加されていて、dataSourceとdelegateはViewControllerに接続されているとします。

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = editButtonItem

// 複数選択を有効にする
tableView.allowsMultipleSelectionDuringEditing = true
}

override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
tableView.isEditing = editing
}
}

extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "Item \(indexPath.row)"
return cell
}
}

extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("select - \(indexPath)")
}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
print("deselect - \(indexPath)")
}
}


ポイント



  • tableView.allowsMultipleSelectionDuringEditing = trueで複数選択を有効

  • 選択時にdidSelectRowAt、選択解除時にdidDeselectRowAtが呼ばれる


    • 選択中のindexPathのリストを保持したい場合は、ここで配列に追加/削除を行います




環境


  • Xcode 9.1

  • Swift 4.0

以上、Cellの複数選択ができるUITableViewの実装メモでした。

今回試したコードはこちらに置いておきます