4

2つのセクション(上部セクションと下部セクション)を持つUITableViewがあります。上部のセクション(セクション0)でアイテムが「チェックオフ」されている場合、それらを下部のセクション(セクション1)に移動します。その逆も同様です。アニメーションを除いて、すべてがうまく機能しています。

私は以下を使用していますが、行の動きが遅いです-他のアプリでより良い結果が見られました。上部の行を下部のセクションにきれいにアニメーション化してほしい...そして下部のセクションの行をオンまたはオフにしたときに上部のセクションにきれいにアニメーション化してほしい。

// set the guests arrival status and use animation
    [guestList beginUpdates];
    if (!guest.didArrive) {
        [guest setDidArrive:YES];
        [guestList reloadSections:sectionIndexSet withRowAnimation:UITableViewRowAnimationBottom];
    } else {
        [guest setDidArrive:NO];
        [guestList reloadSections:sectionIndexSet withRowAnimation:UITableViewRowAnimationTop];
    }
    [guestList endUpdates];

[guestList reloadData];

スムーズなアニメーションを作成するには、これをどのようにコーディングすればよいですか?

編集:

問題を見つけました。代わりに、次のように書く必要があります。

//NSIndexSet *sectionIndexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)];

    // set the guests arrival status and use animation
    [guestList beginUpdates];
    if (!guest.didArrive) {
        [guest setDidArrive:YES];
        [guestList reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationBottom];
    } else {
        [guest setDidArrive:NO];
        [guestList reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop];
    }
    [guestList endUpdates];
[guestList reloadData];

コメントアウトした最初の行に注意してください。もともとこれを追加するのを怠りました。ご覧のとおり、私は不十分に構築されたNSIndexSetを使用していました。

4

2 に答える 2

6

問題が解決しました。編集された回答をご覧ください。コードは次のようになります。

// set the guests arrival status and use animation
[guestList beginUpdates];
if (!guest.didArrive) {
    [guest setDidArrive:YES];
    [guestList reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationBottom];
} else {
    [guest setDidArrive:NO];
    [guestList reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop];
}
[guestList endUpdates];
[guestList reloadData];
于 2012-05-17T02:39:01.060 に答える
4

関数の最後にguestListのReloadDataが必要なのはなぜですか?必要なセクションをすでにリロードしています...それを削除して、もう一度確認してください。

于 2012-05-15T06:56:35.560 に答える