【Swfit4.2/ストーリーボード無し】tableviewでcell削除を実装する

 

Swift4.2のtableviewのセル削除が見当たらなかったのでメモ。

tableviewのcell削除

 

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var sampleTableView: UITableView!
    // 元のデータ
    var resources:[Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // tableviewを作成
        self.sampleTableView = UITableView()
        self.sampleTableView.frame = CGRect(
            x: 0,
            y: 0,
            width: self.view.frame.width,
            height: self.view.frame.height
        )

        self.sampleTableView.register(UITableViewCell.self, forCellReuseIdentifier: "SampleCell")
        
        self.sampleTableView.dataSource = self
        self.sampleTableView.delegate = self
        self.view.addSubview(self.sampleTableView)
    }
    
    // データ数。
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return resources.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // セルのインスタンスの作成
        let cell = tableView.dequeueReusableCell(
            withIdentifier: "SampleCell",
            for: indexPath as IndexPath
            )
        // cellオブジェクトのプロパティのsampleLabelに値をセット。
        cell.textLabel?.text = "\(self.resources[indexPath.row])"

        return cell
    }
    
    // ここで削除する処理を追加
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            self.resources.remove(at: indexPath.row)
            self.sampleTableView.deleteRows(at: [indexPath], with: .fade)
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

それにしてもアップデートで色々変更あるのやっぱり辛いですね。