FMDBで簡単写真アルバムを作ろう Part.9 ~【iPhone】TableViewのセルを削除、commitEditingStyle ~
前回:FMDBで簡単写真アルバムを作ろう Part.8 ~【iPhone】TableViewの画面遷移、異なるView間での値の受け渡し~
簡単写真アルバムのソースコードはGitHubからどうぞ
ー>https://github.com/ics-hiro/SelfPhotoLibrary
ここ数回はTableViewについて書いているので、
Appleの「iOS Table View プログラミングガイド」
もしっかり読みましょう。
今日は行の削除の記事なので、「iOS Table View プログラミングガイド」では73ページからになります。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
引用すると、「ユーザが行内の削除コントロールをタップすると、View Controllerは、Table ViewからtableView:commitEditingStyle:forRowAtIndexPath:メッセージを受信します。」
ViewController.m
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if( editingStyle == UITableViewCellEditingStyleDelete ) { [self removeContents:indexPath]; } }
「セルが削除された場合、引数にindexPathを渡して、removeContentsメソッドを実行しなさい」と書いています。
削除する処理は削除する処理として別に設定するようにしました。
- (void)removeContents:(NSIndexPath*)indexPath { //選択したrow番目の配列要素を削除する。 NSInteger row = [indexPath row]; [titleArry removeObjectAtIndex: row]; [contentsArry removeObjectAtIndex: row]; //セルが消えるアニメーション [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; //いったん、テーブルの中身を削除してしまう。 [DataModels drop_table]; //titleArryとcontentsArryは、すでに要素が削除されていて、残りの要素がつめられている状態。そしてインサートしている。 for (int i = 0; i < titleArry.count; i++ ) { [DataModels insertTitle:[titleArry objectAtIndex:i] Contents:[contentsArry objectAtIndex:i]]; } }
[NSMutableArray] removeObjectAtIndexで配列要素を削除
図解すると、
一番上の「夏目漱石と」のセルを削除した場合、indexPath.rowは0です。
titleArryの0番目も同時に削除するように書いているコードが、[titleArry removeObjectAtIndex: row];の部分となります。
「removeObjectAtIndex」で、指定した番目の配列の要素を削除できます。
今回の場合、削除した配列の要素が詰められて、要素に対して新しい配列の番号が振られることになります。
しかし、たとえば「夏目漱石と」が削除された場合でも「十何年使ってるハサミ」と「日吉の陸上競技場」の配列の番号を変えたくない場合は、
beginUpdates/endUpdatesをはさんで使うことになります。
今回こちらは使いませんので、興味がある方はこちらの記事を参考にしてください。
テーブルのセルの削除や追加にbeginUpdates/endUpdatesは必要か(1)
【セルが消えるアニメーション】deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade
セルが消えるアニメーションですね。UITableViewRowAnimationFade。
あとは、DataModelsクラスのクラスメソッドにアクセスして、テーブルの中身をまるごと消し、
その後新しい配列を順番にいれている、その際はtitleArryの要素数だけforループでぐるぐる回す、
ということですね。
簡単写真アルバムアプリ記事一覧
FMDBで簡単写真アルバムを作ろう Part.1 ~メモが書ける写真アルバムをつくる~
FMDBで簡単写真アルバムを作ろう Part.2 ~Xcode4.3,SingleViewApplication,FMDB準備~
FMDBで簡単写真アルバムを作ろう Part.3 ~必要なファイルを追加して整理しよう~
FMDBで簡単写真アルバムを作ろう Part.4 ~NavigationBarと画面遷移~
FMDBで簡単写真アルバムを作ろう Part.5 ~【iPhone】SQLiteのデータを出し入れするためのクラスをつくる~
FMDBで簡単写真アルバムを作ろう Part.6 ~【iPhone】UITextField,UIActionSheet,UIImagePickerControllerとメモ、写真の保存~
FMDBで簡単写真アルバムを作ろう Part.7 ~【iPhone】SQLiteのデータを取り出してTableViewに表示~
FMDBで簡単写真アルバムを作ろう Part.8 ~【iPhone】TableViewの画面遷移、異なるView間での値の受け渡し~
FMDBで簡単写真アルバムを作ろう Part.9 ~【iPhone】TableViewのセルを削除、commitEditingStyle ~
FMDBで簡単写真アルバムを作ろう 最終章 ~簡単写真アルバムの完成~
======================
当ブログ管理人のツイッターはこちら
◎フォローしてくださると泣いて喜びます!ツイッター上で当ブログの質問などにもできるだけお答えしますし、役に立つiPhoneアプリ開発情報もつぶやきます。個人的なご依頼(たとえば、プログラミングの家庭教師、Skypeレッスンをしてくれないか、iPhoneアプリ開発の勉強会ってやってるの、とかですね)でもかまいません。
■スカイプレッスンについて
開発をしているとその都度ぶつかる問題があると思いますが、検索で調べてもなかなかわからない、あるいは調べても非常に時間がかかる場合があると思います。開発者のみなさんもお忙しいと思いますので、私のレッスンを受けながら開発を進めていただけると、大幅にお時間を短縮できます。加えて、iPhoneアプリ開発の基礎、応用が身につき、今後の開発もスムーズに進められます。
お問い合わせはツイッター、またはhiyoshimarukoアットマークgmail.comまでお願いします。(アットマークを@にしてください)お待ちしております!