Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

TODOを削除できるようにする #3

Open
ginrou opened this issue Apr 15, 2015 · 0 comments
Open

TODOを削除できるようにする #3

ginrou opened this issue Apr 15, 2015 · 0 comments

Comments

@ginrou
Copy link
Contributor

ginrou commented Apr 15, 2015

TODOアプリを作ってみようシリーズの第3回目の演習課題その1です。

内容

#2 に引き続き、この回ではTODOの削除を行います。

todo3

目的

  • UITableViewの編集モードについて

教材

Table View Programming Guide for iOS - Inserting and Deleting Rows and Sections

スタート地点

ブランチ add-todo からブランチを切ってから始めてください。

ゴール地点

ブランチ delete-todo にチェックアウトすると回答を見ることができます。

アプリの仕様

  • tableviewにあるTODOをスワイプすると"Delete"ボタンが出てくる。(あるいは"削除"ボタン)
  • ボタンをタップするとTODOがアニメーション付きで削除される

実装の方針

UITableViewにはrowの削除や順番の入れ替えを行うことのできる編集モード(editing)があります。
この機能の一つにセルをスワイプした時に削除ボタンを出すことができるのでそれを利用します。

実装は比較的容易で、UITableViewDataSourceのメソッドをいくつか実装するだけです。

TODOの削除 172fe3e

実装するメソッドは以下の二つです。

- tableView:canEditRowAtIndexPath: はすべてのセルで削除できるので常にYESを返します。

- tableView:commitEditingStyle:forRowAtIndexPath: では実際の削除動作を行います。
削除は以下のステップで行います。

1. データ構造からの削除

todoを保持しているデータ構造(現在だとViewController.todo)から削除します。
NSArrayでtodoを保持していると削除できないのでNSMutableArrayで持つようにしてください。
248e9a2

2. tableViewから削除

UITableViewからrowを削除するもっとも簡単な方法は [tableView reloadData]; を行うことですが、この場合はアニメーションが追加されません。
動的な更新を行う場合は、[tableView beginUpdates];[tableView endUpdates]; の間で更新処理を行います。
tableViewから行を削除するには - deleteRowsAtIndexPaths:withRowAnimation: を実行します。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant