2011-07-21 2 views
9

ユーザーがUITableViewの一番下までスクロールしているかどうかを検出しようとしています。適切に物を計算するために、私はUITableViewの可視rectを取得する必要があります。どうすればこれを達成できますか?UITableViewの可視のrectを取得するにはどうすればよいですか?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ 

    [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView]; 

    int currentMaxPosition = CGRectGetMaxY([self.tableView visibleRect]); 
    int currentMinPosition = CGRectGetMinY([self.tableView visibleRect]); 

    int tableViewBottom = [self.tableView bounds].size.height - 100; 
    int tableViewTop = 0; 

    //get older messages once we're near the bottom 
    if (currentMaxPosition > tableViewBottom - 100) 
    { 
     NSLog(@"WE AT THE BOTTOM!"); 
    }  

} 

答えて

2

あなたはtableView indexPathsForVisibleRows]中または可視セルを取得し、ユーザーが下にスクロールするかどうかを決定するために[tableView visibleCells]でチェックできます。

+0

visiblecellに基づいて、ユーザーが最下位にいるかどうかをどのように判断するのですか? –

+0

' - (NSArray *)indexPathsForVisibleRows'を使用して、これらの行のインデックスパスを取得します。 –

0
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 

     int i=0; 

     i=indexPath.row; 

     int count=[urTablearray count]; 

     if (count == (++i)) { 

       //do ur stuff here 

     } 


    } 
+0

コードがコンパイルされないため、indexPath.rowのような読み取り専用属性を変更することはできません。 –

+0

今すぐチェック............... –

+0

は有効かどうか –

0

底に達したときにさらに多くのセルをロードする場合は、このpostを試してみてください。

基本的には、行がテーブルビューでは、どのように多くのセクションなど、現在どのくらいあるかを知って使用します。

- (NSInteger)numberOfSections 

- (NSInteger)numberOfRowsInSection:(NSInteger)section 

ます。また、使用することができます

- (NSArray *)indexPathsForVisibleRows 

をインデックスパスを把握します

次に、次のUITableViewDelegateメソッドを使用します。

- (void)tableView:(UITableView *)tableView 
    willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath 

の値を使用して、indexPathの値を使用し、下のインデックスの「近く」の値と比較してください。下部に近い場合は、コンテンツを追加するなどのアクションを実行します。

一部のアプリでは、専用の[その他の読み込み]セルがmanually load additional contentに設定されています。このアプローチは簡単に行えるようになり、アプリで「コンテンツをもっと読み込む」機能が検証されます。

18

UITableViewは単なるUIScrollViewサブクラスなので、すべての通常のUIScrollViewメソッドが適用されます。 UITableViewの可視RECTは、単にその境界である:

CGRect visibleRect = [myTableView bounds]; 

visibleRectの起源は、単にcontentOffsetですので、あなたが使用できる別のアプローチがある:

CGFloat distanceFromBottom = [self.tableView contentSize].height - [self.tableView contentOffset].y; 
+0

私はそれを印刷するとdistanceFromBottomは常に0です –

+0

まさに私が探していたもの、感謝! –

+0

優れています。 ' - [UITableView bounds]'は何らかの理由でtableviewの可視の矩形を必要とするが完全長(不可視の行を含む)のコンテンツrect(この場合は ' - [UITableView frame]'を使う)が必要な場合には完璧です。 –

2

私は画像を表示しようとしていました私がセルをタップしたときに、そのフレームを表示して(テーブルビューの現在位置を取得する)フレームを探したいと思った。

私は次のように使用し、それが働いた:

//originalImageViewFrame is the CGRect that I use for my new view that I want to add to the view. 
    originalImageViewFrame.origin = CGPointZero; 
    originalImageViewFrame.size = self.tableView.contentSize; 

はそれが助け願っています。

関連する問題