2

グループ化された UITableView があります。ユーザーが行を選択すると、そのセルが狭くなります。私はこれを成功裏に達成しました:

//DidSelectRowAtIndexPath

UITableViewCell *cell = [myTable cellForRowAtIndexPath:indexPath];

If (selected == YES) {
    selected = NO;
    cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 320, 35);
   } else { 
    selected = YES;
    cell.frame = CGRectMake(cell.frame.origin.x,     cell.frame.origin.y, 275, 35);
}

//end DidSelectRowAtIndexPath

これは夢のように機能しますが、セルが画面外にスクロールされて再び戻ると、全幅になります (320、ところで、視覚部分が 320 幅であると言っているわけではありません。実際のセル フレームについて話しているのです)。 「CellForRowAtIndexPaths メソッドに「cell.frame = blahblahblah」行を追加しましたが、違いはありません。なぜですか?

4

2 に答える 2

1

これは、セルが画面外にスクロールされて再び戻るたびに再作成されるためです。選択したセルにチェックを追加するか、(インスタンス変数を使用して) タグを付けてから、セルの幅を次のように調整する必要がありますtableView:cellForRowAtIndexPath:

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

    ...

    if (selectedCellIndex == indexPath.row)
         cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 320, 35);
    else
         cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 275, 35);

}

お役に立てれば

于 2012-07-08T04:53:54.867 に答える
0

UITableView には、内部でより高度な処理が行われていることが判明しました。これにより、私が望むものを達成できなくなります。だから私はUISwitchで似たようなことをしようとしています。

于 2012-07-09T14:10:12.297 に答える