以下のコードのように、UITableViewCellcontentViewをパンしています。移動中のUITableViewCellcontentViewの背後にあるビューを知りたいのですが。
私が尋ねる理由は、この「明らかにされたビュー」の色を変更したいからです。セルをスワイプしたときの各tableViewCellの下の色をカスタマイズしたいと思います。たとえば、3行目を左にスワイプすると、セルの後ろに青色が表示されます。4行目を左にスワイプすると、セルの後ろに緑色が表示されます。
- (void)panGestureRecognizer:(UIPanGestureRecognizer *)recognizer {
//...
if ((recognizer.state == UIGestureRecognizerStateBegan
|| recognizer.state == UIGestureRecognizerStateChanged)
&& [recognizer numberOfTouches] > 0) {
CGPoint location1 = [recognizer locationOfTouch:0 inView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location1];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
CGPoint translation = [recognizer translationInView:self.tableView];
cell.contentView.frame = CGRectOffset(cell.contentView.bounds, translation.x, 0);
}
//...
}
私が試したのは、UIViewを作成し、それをcontentViewの後ろのセルに追加することでした。これは機能しますが、満足のいくものではありません。UITableViewRowAnimationLeftを使用してセルの削除をアニメーション化するコードを入力すると、背景の色がセルとともに左に移動します。これは、アニメーションがセルを移動して削除すると、作成した背景ビューがセル全体とともに移動するため、理にかなっています。私が望む動作は、背景色が実際にはセルの後ろにあることです。したがって、削除アニメーションでセルを移動しても、背景色は移動しません。
次のコードは、セルに背景ビューを追加し、それをcontentViewの下に配置する方法です。
[cell.contentView setBackgroundColor:[UIColor whiteColor]];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.tableView.rowHeight)];
view.backgroundColor = [UIColor redColor];
[cell addSubview:view];
[cell bringSubviewToFront:cell.contentView];