web-dev-qa-db-ja.com

特定のUITableViewCellがUITableViewに表示されるかどうかを確認します

Interface Builderを使用して手動で作成したUITableViewといくつかのUITableViewCellsがあります。各セルにoutletを割り当て、UITableViewメソッドでCellForRowAtIndexPathにそれらを接続しています。このメソッドでは、switch(case)メソッドを使用して、特定のセルをUITableViewに表示します。

次に、特定のセルを見つけて、UITableView内に存在するかどうかを確認します。私はメソッドを使用します:UITableView.visibleCellsテーブルビューのセルの配列を取得します。私の質問は-特定のセルがアレイに存在するかどうかを確認するにはどうすればよいですか?割り当てたコンセントをどうにかして使用できますか? -(最良の解決策)、または、識別子を使用できますか?

ありがとう:)

26
ozking

このようにindexPathsForVisibleRowsを使用することもできます:

    NSUInteger index = [_people indexOfObject:person];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
    if ([self.tableView.indexPathsForVisibleRows containsObject:indexPath]) {
      [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                            withRowAnimation:UITableViewRowAnimationFade];
    }

IndexPathがある場合(実際のセルは必要ない場合)はcheaperのようになります。

PS:_peopleは、この場合のバックエンドとして使用されるNSArrayです。

77
StuFF mc
if ([tableView.visibleCells containsObject:myCell])
{
    // Do your thing
}

これは、関心のあるセルを含む個別のインスタンス変数があることを前提としています。質問から行ったと思いますが、明確ではありません。

17
jrturton

UITableViewメソッドを使用できます。

[tableView indexPathForCell:aCell];

セルがtableViewに存在しない場合は、nilを返します。それ以外の場合は、セルのNSIndexPathを取得します。

11
Sorig

Swift 3でこれを行うと、UITableViewCellが表示されているかどうかを確認できます。

let indexPathToVerify = IndexPath(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPathToVerify)

if tableView.visibleCells.contains(cell) {
    // the cell is visible
}
1
pableiros

IOS 7以降、indexPathForVisibleRowsには半透明のナビゲーションバーの下にある行が含まれるため、次のようにする必要があります。

[self.tableView indexPathsForRowsInRect:self.tableView.safeAreaLayoutGuide.layoutFrame]
0
malhal