0

以下のコードのように、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];
4

1 に答える 1

1

あはは!

これに対するエレガントで素晴らしい解決策を見つけました。私は喜びで身震いしています。

必要な背景色で cell.contentView の右側に別のビューを追加しました。セルをスワイプすると、 rightSideView が一緒に引っ張られるので、表示されているビューのように見えます。(コンテンツをそこに入れたい場合、それは別の人にとっては別の問題です... 私はそれをしていません)私がやりたかったのは、各セルに異なる表示色を持たせることだけでした. わーい!削除するスワイプが正しく見えるように、フレームを非常に長くする必要があることに注意してください (つまり、500)。

これが私のコードです。

UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(320, 0, 500, self.tableView.rowHeight)];
label.backgroundColor = [UIColor redColor];
[cell.contentView addSubview:label];
于 2013-02-20T21:23:57.350 に答える