2011-12-27 24 views
37

Tôi muốn phát hiện nếu xem mytable đã được cuộn, tôi đã thử tất cả các sự kiện liên lạc như thế này một:UITableView Scroll kiện

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
    [super touchesBegan:touches withEvent:event]; 
    //my code 
    } 

nhưng có vẻ như tất cả các sự kiện liên lạc không đáp ứng với di chuyển nhưng họ chỉ hưởng ứng khi các ô được chạm vào, di chuyển, ... vv

Có cách nào để phát hiện sự kiện cuộn của UITableView không?

+2

Tham khảo này [Sự kiện Touch trong UIScroll Xem trong iPhone] (http: // stackoverflow .com/a/3603140/1072867) – akk

Trả lời

107

Nếu bạn thực hiện các giao thức UITableViewDelegate, bạn cũng có thể thực hiện một trong những UIScrollViewDelegate phương pháp:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 

hoặc

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

Ví dụ, nếu bạn có một tài sản gọi là tableView:

// ... setting up the table view here ... 
self.tableView.delegate = self; 
// ... 

// Somewhere in your implementation file: 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    NSLog(@"Will begin dragging"); 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSLog(@"Did Scroll"); 
} 

Điều này là do UITableViewDelegate phù hợp với UIScrollViewDelegate, như có thể thấy trong tài liệu hoặc trong tệp tiêu đề.

+0

Nó hoạt động, cảm ơn! –

+1

Còn khi chúng tôi có nhiều hơn một UITableView thì sao? – Solidus

+1

Bạn sẽ có thể đặt đại biểu của cả hai chế độ xem bảng thành 'self' và sau đó kiểm tra xem người nào đã được cuộn bằng cách sử dụng' scrollView' được chuyển. [Xem tại đây] (http://pastebin.com/FzmcYNzv). – fabian789

6

Nếu bạn có nhiều dạng xem bảng theo yêu cầu của Solidus, bạn có thể truyền cuộn từ chế độ gọi lại đến chế độ xem bảng dưới dạng UITableView được lấy từ UIScrollView và sau đó so sánh với bảng xem để tìm bảng xem nguồn.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {  
     UITableView* fromTableView = (UITableView*) scrollView; 
     UITableView* targetTableView = nil; 
     if (fromTableView == self.leftTable) { 
      targetTableView = self.leftTable; 
     } else { 
      targetTableView = self.rightTable; 
     } 
... 
} 
+0

hoàn hảo điều này đã giúp tôi – Paul

1

Đây là những phương pháp từ UITableViewDelegate cho Swift 3 để phát hiện khi một UITableView sẽ di chuyển hoặc làm cuộn:

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 

} 

func scrollViewDidScroll(_ scrollView: UIScrollView) { 

} 
Các vấn đề liên quan