週の 7 日間を表す 7 つの tableViews を持つビューがあります。各 tableView は、0 から 6 までのタグで初期化されます。適切な tableView にアクセスできるように、セルに longPressure 認識エンジンを作成しました。
- (IBAction)longPress:(UIGestureRecognizer *)sender {
self.clickedPoint = [sender locationInView:self.view];
// get most down subView user clicked
UIView *clickedSubView = [self.view hitTest:self.clickedPoint withEvent:nil];
if( [clickedSubView.superview isKindOfClass:[customCell class]] ) {
// get selected tableView
UITableView *selectedTableView = (UITableView*)clickedSubView.superview.superview;
NSLog(@"Selected tag: %d", selectedTableView.tag);
}
}
セルを押すと、タグが正しく表示されます。問題は、tableView 内で行を移動するときです。tableView と longPress で moveRowAtIndexPath: を実行すると、moveRow を作成した tableView のタグは、常に別の tableView の最後の longPress のタグを取得します。
例:
タグ 2 のテーブルで RowRow を移動します。次に、タグ 5 の longPress テーブルだけです。次に、タグ 2 の longPress テーブルに戻りますが、今回はタグ = 5 (直前のもの) をログに記録します。タグ 1 の longPress テーブルの場合、longPress の「タグ 2 のテーブル」(と思われる) に再度戻り、タグ 1 をタグ 2 のはずの場所に記録します。
beginUpdates によりタグが失われ、リロードする必要があることを読みました。だから私はこれを試しました:
// reload the tableView after moveRowAtIndexPath method
selectedTableView reloadData];
// also tried refresh the view that contains all the tableViews
[[self getWeekView] setNeedsDisplay];
// and also tried to set the tag again after moveRowAtIndexPath method
selectedTableView.tag = index;
何も機能しません。また、clickedSubView に何かが起こっているのか、正しい hitTest ビューを取得していたのか疑問に思っていましたが、色付きの境界線でテストしたところ、moveRowAtIndexPath メソッドの後に間違ったタグを付けただけで、正しいビューが取得されました。
皆さん、ありがとうございました!