【iPhone】tableViewの削除について

いってきました。レインボーアップスクール第二回。

今回はカメラと単語帳アプリでした。

そのなかで出てきたtableViewの削除についてメモ。

iPhoneのtableViewを削除する時のやりかた。
ぐぐって見つけたコードにこんな感じのやつ見つけたんだが
タップするたびにボタンを生成してたらメモリリークしちゃうんじゃないかな・・・?と思った。

  • (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
NSInteger row = [indexPath row];
//↓indexListはこっちがMutableArrayで勝手に作ったplistのファイル
[indexList removeObjectAtIndex:row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}

  • (void)enterEditMode {

// Add the edit button
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithTitle:@"完了"
style:UIBarButtonItemStylePlain
target:self
action:@selector(leaveEditMode)]autorelease];
[self.tableView setEditing:YES animated:YES];
}
// Finished with edit mode, so restore the buttons and commit changes

  • (void)leaveEditMode {// Add the edit button

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]initWithTitle:@"編集"
style:UIBarButtonItemStylePlain
target:self
action:@selector(enterEditMode)]
autorelease];
[self.tableView setEditing:NO animated:YES];
}

autoreleaseするからいいのかなぁ・・・?
正直リークするかどうかはわからないけど、
せっかくIBあるんだからそれ使えばいいじゃん、ってことで書き直してみた。


セルの削除自体の処理はサンプル通りのデリゲートメソッドで大丈夫。
けど毎回ボタン書くのが個人的に気持ち悪いので
BOOL型のflagを使って一つのボタンを二種類に振り分け。

  • (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
NSInteger row = [indexPath row];
//↓indexListはこっちがMutableArrayで勝手に作ったplistのファイル
[indexList removeObjectAtIndex:row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}

  • (IBAction)EditButton:(id)sender{

if(editFlag==YES){
[editButton setTitle:@"完了"];
[self.tableView setEditing:YES animated:YES];
editFlag=NO;
} else if(editFlag==NO){
[editButton setTitle:@"編集"];
[self.tableView setEditing:NO animated:YES];
editFlag=YES;
}
}


こんな感じ。
あとはIBで接続させるだけ。


インターフェースビルダーってガチなプログラマの人からは嫌われる傾向にあるけど
プログラマだからといってUI軽視しちゃいけないから
個人的には切り離すべきじゃないんじゃないかなーと思ってたりする。
特にiPhoneのUIは大事って話はそこらじゅうでされてるわけだし。
(ゲームアプリとかでIB使うのはたぶん無理だけども)

まぁぶっちゃけ文系の自分にはIBっていう取っ付きやすい物のおかげで
iPhoneやれてるからすすめてるっていうのもあるけどw

それ以上に常にユーザー視点を意識させると言う意味で
IBはよくできたシステムだと思うんだよなあ。
IB使わんでもかっこいいインターフェースできるし!って言われたらそれまでだけど
もしプログラミングの心地よさを追求するあまりUIを軽視することになっているなら
それはまずいっしょ。

あんなちっちゃい画面で見た目悪いと目も当てられんよね。