2014-04-04 84 views
2

我試圖確定哪些部分當前在我的UITableView中可見。但是,有時我的部分沒有行,只顯示部分標題。有沒有一種方法可以通過使用節標題來確定當前正在顯示的UITableView中的哪些部分?詢問 - (NSArray *)indexPathsForVisibleRows無法確定節,因爲沒有可見的實際行,只有節標題。當部分沒有行時,確定UITableView的可見部分

回答

3

我能想到的最好的方法是使用contentOffset和frame.size來計算可見的矩形並遍歷每個調用rectForSection:的部分並查看哪些部分相交。喜歡的東西:

-(NSIndexSet*)visibleSections 
{ 
    NSMutableIndexSet* indexSet = [NSMutableIndexSet new]; 
    CGRect    visible = self.tableView.bounds; 

    for(NSInteger section = 0 ; section < [self numberOfSections]) 
    { 
     CGRect   sectBounds = [self.tableView rectForSection:section]; 

     if(CGRectIntersectsRect(sectBounds, visible)) 
     { 
      [indexSet addIndex:section]; 
     } 
    } 

    return indexSet; 
} 
+0

這個偉大的工程!我做的唯一的調整是使用self.tableview.bounds而不是獲取框架並修改它的原點。 – seankellycs

+0

是的,這可能是更好的主意:) –

0

斯威夫特版本

if let visibleRows = tableView.indexPathsForVisibleRows { 
    let visibleSections = visibleRows.map({$0.section}) 
} 
+1

這不適用於可展開的可摺疊部分 –

0

斯威夫特3個版本OD @大衛回答

func visibleSection() -> IndexSet { 

     var indexSet: IndexSet = IndexSet() 
     let visibleRect: CGRect = self.bounds 

     for sectionIndex in 0..<self.numberOfSections { 

      let sectionBounds = self.rect(forSection: sectionIndex) 

      if sectionBounds.intersects(visibleRect) { 

       indexSet.insert(sectionIndex) 
      } 
     } 
     return indexSet 
    } 
相關問題