2012-03-02 7 views
8

UITableViewの一番上のセクションのタイトルまたはインデックスを取得する最も正確な方法は何ですか?私はインデックス0のセクションを意味するのではなく、スクロール中に上部に固定されているセクションヘッダーを意味します。UITableViewの現在の固定セクションを取得する

答えて

13

あなたがそうのような画面上部のセクション取得することができます。

 NSUInteger sectionNumber = [[tableView indexPathForCell:[[tableView visibleCells] objectAtIndex:0]] section]; 

をしかし、それは過渡期にあるとき、それは数がする奇妙な取得しますので、この方法は、あなたのために最適ではないかもしれません2つのヘッダー間。あなたが移行中にセクションを知る必要がない限り、あなたはうまくいくはずです。 これはあなたの探していることを望みます。

+0

私は区間番号最新の状態に保つために、これをどのような方法を入れる必要がありますか? – Bot

+0

ユーザーがスクロールするたびにScrollviewdidscrollを更新したい場合は –

+1

Brilliant、ありがとう! – devios1

-1

クラスにUIScrollViewDelegateを実装して、次の機能を実装させてください。 これは、tableviewがスクロールを停止した場合にのみ、セクションを確実に取得します。

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
} 
+0

このようにすれば、移行中のセクションが混乱してしまう問題を防ぐことができますか? – Bot

+0

何らかの理由で私のカスタムセルにエラーがスローされます... - [AppointmentCustomCell section]:インスタンス0x89af850に送られたセレクタが認識できません。私がしているのは、あなたが提供した上記のコードでNSLoggingセクションです。 – Bot

+0

これは古いですが、 'self.tableView visibleCells'が' IndexPaths'ではなく 'UITableViewCells'を与えるので、間違っています。 indexPathsを取得したら、indexPaths [0] .sectionを実行できます。 – esh

3

私が代わりにvisibleCellsの照会で、それがインデックスのパスを次のように依頼する方が良いでしょうと信じています:

NSInteger section = [[[self.tableView indexPathsForVisibleRows] firstObject] section]; 

あなたはあなたのに応じてUIScrollViewDelegateのいずれかの方法でこのコードを使用することができますニーズ。

1

スウィフトバージョン

使用最初(現在の固定)または最後(最後に表示)

if let section:Int = tableView.indexPathsForVisibleRows?.last?.section { 

     tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: section), atScrollPosition: UITableViewScrollPosition.None, animated: true) 

    } 
関連する問題