1

uitableview で選択されていないすべてのセルの上に透明なレイヤーを追加したいと思います。次のコードを実装しました。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    customCell *selectedCell = (customCell*)[tableView cellForRowAtIndexPath:indexPath];

    overlayAboveSelectedCell = [[UIView alloc] initWithFrame:CGRectMake(listViewTable.frameOrigin.x, listViewTable.frame.origin.y, listViewTable.frameWidth, selectedCell.frameOrigin.y)];
    overlayAboveSelectedCell.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
    [self.view insertSubview:overlayAboveSelectedCell aboveSubview:listViewTable];

    overlayBellowSelectedCell = [[UIView alloc] initWithFrame:CGRectMake(listViewTable.frameOrigin.x, selectedCell.frameOrigin.y+selectedCell.frameHeight, listViewTable.frameWidth, listViewTable.frameHeight-selectedCell.frameOrigin.y-selectedCell.frameHeight)];
    overlayBellowSelectedCell.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
    [self.view insertSubview:overlayBellowSelectedCell aboveSubview:listViewTable];

    listViewTable.scrollEnabled = NO;

    [selectedCell doSomething];
}

1 つの例外を除いて正常に動作します - すべての座標は元のセル位置に対して計算されます (つまり、ユーザーが下にスクロールしてもセルの原点は同じままであるため、画面の暗くしてはいけない部分が間違って配置される可能性があります。選択したセルの実際の座標が考慮されるようにコードを変更しますか?

4

1 に答える 1

0

「可視」領域またはウィンドウから UITableviewCell の位置を取得するというNick の回答を使用して、選択したセルの現在の位置を取得できました。

新しい実装:

customCell *selectedCell = (customCell*)[tableView cellForRowAtIndexPath:indexPath];
CGRect position = [tableView convertRect:[tableView rectForRowAtIndexPath:indexPath] toView:[tableView superview]];

overlayAboveSelectedCell = [[UIView alloc] initWithFrame:CGRectMake(listViewTable.frame.origin.x, listViewTable.frame.origin.y, listViewTable.frameWidth, position.origin.y)];
overlayAboveSelectedCell.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
[self.view insertSubview:overlayAboveSelectedCell aboveSubview:listViewTable];

overlayBellowSelectedCell = [[UIView alloc] initWithFrame:CGRectMake(listViewTable.frameOrigin.x, position.origin.y+selectedCell.frameHeight, listViewTable.frameWidth, listViewTable.frameHeight-position.origin.y-selectedCell.frameHeight)];
overlayBellowSelectedCell.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
[self.view insertSubview:overlayBellowSelectedCell aboveSubview:listViewTable];

listViewTable.scrollEnabled = NO;
于 2012-08-29T13:33:51.947 に答える