0
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 //case 1
 //The user is selecting the cell which is currently expanded
 //we want to minimize it back
 if(selectedIndex == indexPath.row)
 {
    selectedIndex = -1;
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

    return;
}

//case 2 
//First we check if a cell is already expanded.
//If it is we want to minimize make sure it is reloaded to minimize it back
if(selectedIndex >= 0)
{
    NSIndexPath *previousPath = [NSIndexPath indexPathForRow:selectedIndex inSection:0];
    selectedIndex = indexPath.row;
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:previousPath] withRowAnimation:UITableViewRowAnimationFade];        
}


//case 3
//Finally set the selected index to the new selection and reload it to expand
selectedIndex = indexPath.row;
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

}

ケース1とケース2が、すでに拡張された行の折りたたみに関連していることに注意してください。ケース3は、拡張されていない行の拡張に関するものです。

展開と折りたたみの両方で、reloadRowsAtIndexPaths関数の同じ関数が使用されます。

私にとっての質問は、トグルボタンが展開されたときにその関数を再度実行すると折りたたまれ、折りたたまれたときに展開されるということです。

4

1 に答える 1

1

何が起こるかというとreloadRowsAtIndexPaths:、テーブルビューを呼び出すと、の実装を呼び出すことによってそれらの行が再ロードさtableView:cellForRowAtIndexPath:れますUITableViewDataSourceselectedIndex変数を使用して、展開または折りたたみのどちらで表示するかを決定するセルを返すのはあなた次第です(特定のアプリケーションにとってそれが意味するものは何でも)。また、あなたを呼び出しtableView:heightForRowAtIndexPath:ますUITableViewDelegate(はい、これがデリゲートにあるのはばかげています)ので、セルの高さが変更された場合、このメソッドもに応じた値を返す必要がありますselectedIndex

reloadRowsAtIndexPaths:また、次のように1回だけ電話することをお勧めします。

NSMutableArray* rows = [NSMutableArray arrayWithCapacity:2];
// Case 2
if(selectedIndex >= 0)
{
    NSIndexPath* previousPath = [NSIndexPath indexPathForRow:selectedIndex inSection:0];
    [rows addObject:previousPath];
}
// Case 3
selectedIndex = indexPath.row;
[rows addObject:indexPath];
[tableView reloadRowsAtIndexPaths:rows withRowAnimation:UITableViewRowAnimationFade];
于 2012-06-11T19:05:00.383 に答える