有什麼方法可以知道桌面單元當前是否可見? 我有一個tableview的第一個單元格(0)是一個uisearchbar。 如果搜索未激活,則通過偏移量隱藏單元格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
方法更有用,它返回一個表格單元格對象數組。表單元對象得到回收,所以在大表中,它們最終不會有簡單的關聯返回到數據源。
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)
{
要檢查的tableview細胞可見或不可見使用此代碼行的
if(![tableView.indexPathsForVisibleRows containsObject:newIndexPath])
{
// your code
}
這裏newIndexPath是檢查電池的IndexPath .....
Swift 3.0
if !(tableView.indexPathsForVisibleRows?.contains(newIndexPath)) {
// Your code here
}
我收到了關於聊天的保留計數的回覆謝謝...我問同樣的問題在這裏http://stackoverflow.com/questions/12990128/what-is-ios-retain-do-at-backend但我得到負分.. :(也爲+1這.. – 2012-10-30 09:10:28
另一種解決方案(也可用於檢查行是否完全可見)將檢查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];
}
而且使用cellForRowAtIndexPath:
應該工作,因爲它返回一個nil
對象,如果該行不可見:
if([tableView cellForRowAtIndexPath:ip]==nil){
// row is not visible
}
斯威夫特版本:
if let indices = tableView.indexPathsForVisibleRows {
for index in indices {
if index.row == 0 {
return true
}
}
}
return false
我用這在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 }
} }
奇妙的東西! – Fattie 2017-02-18 19:29:02
請注意,「有點可見」是「可見的」。此外,在viewWillAppear中,當佈局正在進行時,您可能會從indexPathsForVisibleRows
獲得誤報,如果您正在查看最後一行,即使調用layoutIfNeeded()
也無法幫助您處理表格。您需要在viewDidAppear
之後檢查內容。
如果最後一行是完全可見的,則此swift 3.1代碼將禁用滾動。在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
}
- 1. 確定通知面板是否可見
- 2. 確定是否點可見
- 3. 如何確定一個特定的DOM元素是否可見?
- 4. 確定Unicode字符是否可見?
- 5. 確定細胞是否可見
- 6. 確定iframe中的元素是否在屏幕上可見
- 7. WPF:確定面板是否對用戶可見
- 8. Flex 3:確定滾動面板子是否可見
- 9. 如何確定工作表單元格是否在VBA中可見/顯示?
- 10. 確定Word單元格是否合併
- 11. 確定對象是否可見並可點擊
- 12. 確定程序是否在遠程桌面上運行
- 13. 在QTableWidget中,如何確定空單元格是否可編輯?
- 14. 如何確定列是否可見或不可見的jQuery的數據表
- 15. Ubuntu桌面在Azure xrdp上不可見
- 16. 桌面單元格值
- 17. 桌面單元格覆蓋
- 18. Deplhi TEmbeddedWB檢查元素是否可見
- 19. 檢查文本是否在HTML元素的頁面上可見
- 20. 如何確定元素是否在Spark DataGrid Scroller視口中可見
- 21. 對用戶沒有可見表單的桌面通知程序
- 22. 是否可以用C#隱藏特定的桌面圖標?
- 23. UITableView的一個可見單元:確定哪些是最明顯的
- 24. 檢查表單組是否可見
- 25. Mac桌面是否有UIImagePicker
- 26. 確定項目是否在RecyclerView上可見
- 27. 確定窗口是否可見或不使用C#
- 28. 確定子視圖是否在UIScrollView中可見
- 29. 如何確定表格行是否可見?
- 30. 確定當前屏幕是否有可見的導航欄
謝謝!這是非常有用的,但它應該是「indexPathsForVisibleRows」而不是「indexPathsForvisibleRows」 – mklfarha 2011-03-18 00:10:16
感謝這個answer.Star丟失。 「for(NSIndexPath *索引中的索引){」 – 2011-06-27 14:55:12
@Devunwired我有一個後續問題。如果我想檢查一行是否完全可見,該怎麼辦?你的代碼是好的,除了它也返回YES,如果行只是部分可見。謝謝! – pixelfreak 2011-10-02 00:20:41