0

ユーザーがリストに項目を追加したら、新しい行にスクロールして強調表示し、選択します (これにより、新しいコントローラーがプッシュされます)。重要な部分は、スクロール アニメーションが完了するのを待ってから、新しいコントローラーを押します。

この回答では、アニメーション デリゲートを使用してスクロールが完了するまで待機する方法を学びました。

ただし、挿入行が既にスクリーン上にある場合、テーブル ビューはスクロールせず、メソッドは起動しません。

スクロールが終了するまで新しいコントローラーをプッシュするのを待ち、スクロールが開始されない場合に対処するにはどうすればよいですか?また、各ケースの違いをどのように見分けることができますか?

4

2 に答える 2

1

特定の行がテーブル ビューに表示されているかどうかを確認する最も簡単な方法は、次のようなものです。

if (!CGRectContainsRect([self.tableView bounds], [self.tableView rectForRowAtIndexPath:indexPath])
{
    // the row is partially outside the table view’s boundaries and needs to be scrolled for full visibility
}
else
{
    // the row is within the boundaries and does not need to be scrolled
}
于 2013-01-08T23:38:02.017 に答える
1

スクロールが必要かどうかを確認するメソッドを作成してみてください。スクロールが必要ない場合は、すぐにプッシュを呼び出します。それ以外の場合は、デリゲートの呼び出しを待ってからプッシュします。

- (BOOL)isSrollingingNeededForIndexPath:(NSIndexPath *)indexPath {
    NSArray *visibleIndices = [self.tableView indexPathsForVisibleRows];
    for (NSIndexPath *visibleIndexPath in visibleIndices)
        if ([indexPath compare:visibleIndexPath] == NSOrderedSame)
            return NO;
    return YES;
}

編集:良い点。indexPathsForVisibleRowsデータのレンダリングに使用されるため。

indexPathsForRowsInRectを使用して「目に見える四角形」を決定する場所で、本質的に同じことを行うことができます。content.offset.ytableview.frame.size.height

rowHeight-1次に、上部と下部の部分的に表示される行を考慮して、四角形の上部に追加し、四角形の下部から減算することができますrowHeight - 1。静的な高さの行がある場合、コードはあまり危険ではありません。さまざまな高さの行がある場合でも機能しますが、もう少し複雑になります。

とはいえ、簡単な答えが得られると思われるものには、多くのコードが含まれているようです。

于 2013-01-08T20:12:18.113 に答える