Tableview 셀이 표시되는지 확인
현재 tableview 셀이 표시되는지 알 수있는 방법이 있습니까? 첫 번째 셀 (0)이 uisearchbar 인 tableview가 있습니다. 검색이 활성화되지 않은 경우 오프셋을 통해 셀 0을 숨 깁니다. 테이블에 몇 개의 행만있는 경우 행 0이 표시됩니다. 행 0이 표시되는지 또는 맨 위 행인지 확인하는 방법은 무엇입니까?
UITableView
호출 인스턴스 메소드 갖는다 indexPathsForVisibleRows
반환 NSArray
의 NSIndexPath
현재 표시되는 테이블의 각 행에 대해 개체. 필요한 빈도로이 방법을 확인하고 적절한 행을 확인할 수 있습니다. 예를 tableView
들어가 테이블에 대한 참조 인 경우 다음 방법은 행 0이 화면에 있는지 여부를 알려줍니다.
-(BOOL)isRowZeroVisible {
NSArray *indexes = [tableView indexPathsForVisibleRows];
for (NSIndexPath *index in indexes) {
if (index.row == 0) {
return YES;
}
}
return NO;
}
UITableView
메서드가를 반환 하기 때문에 NSIndexPath
섹션 또는 행 / 섹션 조합을 찾기 위해이를 쉽게 확장 할 수 있습니다.
이것은 visibleCells
테이블 셀 객체의 배열을 반환하는 메서드 보다 더 유용 합니다. 테이블 셀 개체는 재활용되므로 큰 테이블에서는 궁극적으로 데이터 소스와의 단순한 상관 관계가 없습니다.
tableview 셀이 표시되는지 확인하려면이 코드를 사용하지 마십시오.
if(![tableView.indexPathsForVisibleRows containsObject:newIndexPath])
{
// your code
}
여기서 newIndexPath는 셀 검사의 IndexPath입니다 .....
스위프트 3.0
if !(tableView.indexPathsForVisibleRows?.contains(newIndexPath)) {
// Your code here
}
나는 이것을 Swift 3.0에서 사용합니다.
extension UITableView {
/// Check if cell at the specific section and row is visible
/// - Parameters:
/// - section: an Int reprenseting a UITableView section
/// - row: and Int representing a UITableView row
/// - Returns: True if cell at section and row is visible, False otherwise
func isCellVisible(section:Int, row: Int) -> Bool {
guard let indexes = self.indexPathsForVisibleRows else {
return false
}
return indexes.contains {$0.section == section && $0.row == row }
} }
Swift 버전 :
if let indices = tableView.indexPathsForVisibleRows {
for index in indices {
if index.row == 0 {
return true
}
}
}
return false
또 다른 솔루션 (행이 완전히 보이는지 확인하는 데 사용할 수도 있음) row
은의 프레임 이 tableview
.
다음 코드에서 다음을 ip
나타냅니다 NSIndexPath
.
CGRect cellFrame = [tableView rectForRowAtIndexPath:ip];
if (cellFrame.origin.y<tableView.contentOffset.y) { // the row is above visible rect
[tableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:NO];
}
else if(cellFrame.origin.y+cellFrame.size.height>tableView.contentOffset.y+tableView.frame.size.height-tableView.contentInset.top-tableView.contentInset.bottom){ // the row is below visible rect
[tableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}
Also using cellForRowAtIndexPath:
should work, since it returns a nil
object if the row is not visible:
if([tableView cellForRowAtIndexPath:ip]==nil){
// row is not visible
}
IOS 4:
NSArray *cellsVisible = [tableView indexPathsForVisibleRows];
NSUInteger idx = NSNotFound;
idx = [cellsVisible indexOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop)
{
return ([(NSIndexPath *)obj compare:indexPath] == NSOrderedSame);
}];
if (idx == NSNotFound)
{
Note that "Somewhat visible" is "visible". Also, in viewWillAppear, you might get false positives from indexPathsForVisibleRows
as layout is in progress, and if you're looking at the last row, even calling layoutIfNeeded()
won't help you for tables. You'll want to check things in/after viewDidAppear
.
This swift 3.1 code will disable scroll if the last row is fully visible. Call it in/after viewDidAppear.
let numRows = tableView.numberOfRows(inSection: 0) // this can't be in viewWillAppear because the table's frame isn't set to proper height even after layoutIfNeeded()
let lastRowRect = tableView.rectForRow(at: IndexPath.init(row: numRows-1, section: 0))
if lastRowRect.origin.y + lastRowRect.size.height > tableView.frame.size.height {
tableView.isScrollEnabled = true
} else {
tableView.isScrollEnabled = false
}
ReferenceURL : https://stackoverflow.com/questions/3326658/determine-if-a-tableview-cell-is-visible
'IT Share you' 카테고리의 다른 글
오류 : gdal-config를 찾을 수 없습니다. (0) | 2021.01.09 |
---|---|
ASP.NET에서 날짜 형식을 전역 적으로 어떻게 설정합니까? (0) | 2021.01.09 |
Scala : 개체 목록에서 중복 제거 (0) | 2021.01.09 |
ASP.NET MVC URL 경로에 해시 값 포함 (0) | 2021.01.09 |
Android Studio에서 최근 프로젝트 목록을 지우는 방법은 무엇입니까? (0) | 2021.01.09 |