セパレータを表示しない
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
注: 管理対象のビューが複数のサブビューで構成されており、その中の1つがTableViewの場合は、 Table Viewを管理するためにはUITableViewControllerのサブクラスではなく、UIViewController のサブクラスを使用すべきです。UITableViewControllerクラスのデフォルトの動作では、Navigation BarとTab Barの間の(これら両方が存在する場合)画面一杯にTable Viewを表示します。 UITableViewControllerのサブクラスではなくUIViewControllerのサブクラスを使用してTable Viewを管理することにした場合は、ヒューマンインターフェイスガイドラインに適合するように、 前述のいくつかのタスクを実行する必要があります。Table Viewを表示する前にTable View内の選択 をクリアするために、deselectRowAtIndexPath:animated:を呼び出して選択中の行(存在する場 合)をクリアするviewWillAppear:メソッドを実装します。Table Viewの表示が完了したら、Table ViewにflashScrollIndicatorsメッセージを送信することでScroll Viewのスクロールインジケータ を点滅させなければなりません。それには、UIViewControllerのviewDidAppear:メソッドをオー バーライドします。
// The following three methods must be implented in a UIViewController // that manages a UITableView but which isn't a UITableViewController // ============================================================== // setEditing:animated: // ============================================================== - (void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [self.tableView setEditing:editing animated:animated]; } // ============================================================== // viewWillAppear: // ============================================================== - (void)viewWillAppear:(BOOL)animated { // Unselect the selected row if any NSIndexPath* selection = [self.tableView indexPathForSelectedRow]; if (selection) [self.tableView deselectRowAtIndexPath:selection animated:YES]; [self.tableView reloadData]; } // ============================================================== // viewDidAppear: // ============================================================== - (void)viewDidAppear:(BOOL)animated { // The scrollbars won't flash unless the tableview is long enough. [self.tableView flashScrollIndicators]; } - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { [self.tableView flashScrollIndicators]; }
tableViewでinsertRowsAtIndexPathsとdeleteRowAtIndexPathsを実行。
[self.tableView beginUpdates]; [self.tableView insertRowsAtIndexPaths:insertPaths withRowAnimation:UITableViewRowAnimationTop]; [self.tableView deleteRowsAtIndexPaths:deletePaths withRowAnimation:UITableViewRowAnimationNone]; [self.tableView endUpdates];
エラーが発生。
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableIndexSet addIndexesInRange:]: Range {2147483647, 1} exceeds maximum index value of NSNotFound - 1'
エラーメッセージの意味が分かりづらいが、indexPathがおかしいことが原因だった。beginUpdateとendUpdateで囲んで実行する場合、追加・削除前に存在するセクション、行を指定してNSIndexPathをつくらないといけない。そこを間違えていないか確認する。