Interface Builderを使用して手動で作成したUITableView
といくつかのUITableViewCells
があります。各セルにoutlet
を割り当て、UITableView
メソッドでCellForRowAtIndexPath
にそれらを接続しています。このメソッドでは、switch(case)
メソッドを使用して、特定のセルをUITableView
に表示します。
次に、特定のセルを見つけて、UITableView
内に存在するかどうかを確認します。私はメソッドを使用します:UITableView.visibleCells
テーブルビューのセルの配列を取得します。私の質問は-特定のセルがアレイに存在するかどうかを確認するにはどうすればよいですか?割り当てたコンセントをどうにかして使用できますか? -(最良の解決策)、または、識別子を使用できますか?
ありがとう:)
このように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
です。
if ([tableView.visibleCells containsObject:myCell])
{
// Do your thing
}
これは、関心のあるセルを含む個別のインスタンス変数があることを前提としています。質問から行ったと思いますが、明確ではありません。
UITableViewメソッドを使用できます。
[tableView indexPathForCell:aCell];
セルがtableViewに存在しない場合は、nilを返します。それ以外の場合は、セルのNSIndexPathを取得します。
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
}
IOS 7以降、indexPathForVisibleRows
には半透明のナビゲーションバーの下にある行が含まれるため、次のようにする必要があります。
[self.tableView indexPathsForRowsInRect:self.tableView.safeAreaLayoutGuide.layoutFrame]