2011-07-21 2 views
9

Tôi đang cố gắng phát hiện xem người dùng đã cuộn xuống dưới cùng của một UITableView sao cho tôi có thể làm một số nội dung bổ sung. Để tính toán mọi thứ đúng cách, tôi cần phải có được trực quan có thể nhìn thấy của UITableView. Làm thế nào tôi có thể đạt được điều này?Làm thế nào tôi có thể nhận được trực quan có thể nhìn thấy của UITableView?

- (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!"); 
    }  

} 

Trả lời

2

Bạn có thể kiểm tra trong [tableView visibleCells] để có được những tế bào có thể nhìn thấy hoặc trong tableView indexPathsForVisibleRows] và xác định nếu người dùng cuộn xuống phía dưới.

+0

Dựa trên visiblecell làm cách nào để xác định xem người dùng có ở dưới cùng không? –

+0

sử dụng '- (NSArray *) indexPathsForVisibleRows' để lấy đường dẫn chỉ mục cho những hàng này –

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

mã đó không biên dịch, bạn không thể sửa đổi thuộc tính chỉ đọc như indexPath.row. –

+0

hãy kiểm tra ngay bây giờ ............... –

+0

đã hoạt động hay không –

0

Nếu bạn muốn tải nhiều ô hơn khi bạn chạm đáy, hãy thử điều này post.

Về cơ bản bạn biết có bao nhiêu hàng hiện đang trong giao diện bảng, có bao nhiêu phần, vv, sử dụng:

- (NSInteger)numberOfSections 

- (NSInteger)numberOfRowsInSection:(NSInteger)section 

Bạn cũng có thể sử dụng:

- (NSArray *)indexPathsForVisibleRows 

để tìm ra những con đường chỉ số của các ô gần đáy ..

Sau đó, sử dụng phương pháp UITableViewDelegate sau:

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

và sử dụng giá trị indexPath và so sánh nó với "gần" các chỉ mục dưới cùng. Nếu gần phía dưới, hãy thực hiện một số hành động, như tải thêm nội dung.

Một số ứng dụng có ô "Tải thêm ..." chuyên dụng đến manually load additional content. Cách tiếp cận này dễ dàng hơn để bắt đầu và nó xác thực chức năng 'tải thêm nội dung' trong ứng dụng của bạn.

18

UITableView chỉ là lớp con UIScrollView, vì vậy tất cả các phương thức UIScrollView thông thường đều áp dụng, ví dụ: rect hữu hình của một UITableView chỉ đơn giản là giới hạn của nó:

CGRect visibleRect = [myTableView bounds]; 

Nguồn gốc của visibleRect chỉ đơn giản là contentOffset, vì vậy cách tiếp cận khác, bạn có thể sử dụng là:

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

khoảng cáchFromBottom luôn bằng 0 khi tôi in nó –

+0

Chính xác những gì tôi đang tìm kiếm, cảm ơn! –

+0

Tuyệt vời. '- [UITableView bounds]' là hoàn hảo nếu vì một lý do nào đó cần xem trực quan của tableview nhưng không phải toàn bộ chiều dài (bao gồm hàng vô hình) nội dung rect (trong trường hợp này sử dụng '- [khung UITableView]'). –

2

Tôi đã cố gắng để hiển thị một hình ảnh khi tôi gõ vào một ô, và tôi muốn tìm ra khung hình để hiển thị nó (lấy vị trí hiện tại của tableview).

tôi đã sử dụng sau đây và nó làm việc:

//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; 

Hy vọng nó giúp.