2013-05-13 45 views
12

Có cách nào để kiểm tra xem bảng xem vừa cuộn xong chưa? table.isDraggingtable.isDecelerating là hai phương pháp duy nhất tôi có thể tìm thấy. Tôi không chắc chắn làm thế nào tôi có thể dự đoán hoặc nhận được thông báo khi tableview kết thúc di chuyển.cách kiểm tra khi nào cuộn UITableView được thực hiện

Tôi có thể sử dụng bộ hẹn giờ để kiểm tra mỗi giây nếu tableView đang cuộn hay không?

Trả lời

0

UITableView phù hợp với UIScrollViewDelegate. Vui lòng tham khảo tài liệu của giao thức đó, nó có các phương thức bạn cần.

30

Bạn sẽ thực hiện UIScrollViewDelegate phương pháp giao thức như sau:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) { 
     [self scrollingFinish]; 
    } 
} 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    [self scrollingFinish]; 
} 
- (void)scrollingFinish { 
    //enter code here 
} 

Đối với phương pháp đại biểu trên The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration. Khi xem chậm lại để dừng lại, tham số decelerate sẽ NO.

Thứ hai được sử dụng để cuộn chậm, thậm chí di chuyển dừng khi ngón tay của bạn chạm vào, như Apple Documents đã nói, when the scrolling movement comes to a halt.

+1

người dùng cũng có thể gọi bảng cuộn bằng cách khai thác phía trên cùng của màn hình. Thật không may, trong trường hợp này scrollViewDidEndDecelerating không được gọi, vì vậy chúng ta phải triển khai scrollViewDidScrollToTop để xử lý trường hợp này. –

+0

Câu trả lời này là tốt nhất và @JovanStankovic, bạn rất chính xác. –

4

Mã bên dưới sẽ cập nhật cho bạn mỗi khi người dùng cuộn dừng lại.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) 
    { 
     if (isScrollingStart) 
     { 
      isScrollingStart=NO; 
      [self scrollingStopped]; 
     } 
    } 
} 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 

    if (isScrollingStart) 
    { 
     isScrollingStart=NO; 
     [self scrollingStopped]; 
    } 
} 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    isScrollingStart=YES; 
} 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    isScrollingStart=YES; 
} 
-(void)scrollingStopped 
{ 
    NSLog(@"Scrolling stopped"); 
} 
+0

Hoạt động rất độc đáo, cảm ơn bạn. Giá trị 'isScrollingEnd' được viết nhưng không bao giờ được sử dụng. Có phải chỉ trong trường hợp bạn cần phải sử dụng nó? Bạn có ý định kiểm tra nó trong scrollingStopped không? – oyalhi

+0

Cập nhật ans. , không sử dụng isScrollingEnd ở đây :) –

+0

Cảm ơn bạn! Làm việc tốt. – Raja

0

Sau khi sử dụng shanegao's answer và bình luận Jovan Stankovic về nó, tôi nghĩ ra điều này cho Swift3 -

extension NMViewController: UIScrollViewDelegate { 
    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
     if !decelerate { 
      scrollViewDidEndDecelerating(scrollView) 
     } 
    } 

    func scrollViewDidScrollToTop(_ scrollView: UIScrollView) { 
     scrollViewDidEndDecelerating(scrollView) 
    } 

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
     // Your logic to handle after scrolling is done 
    } 
} 
Các vấn đề liên quan