2012-03-29 26 views
8

Khi tôi chọn một hàng trong UITableView, tôi đang gọi scrollRectToVisible:animated trên GCRect của khung của hàng và ngay lập tức sau đó thực hiện một số hoạt ảnh khác. Vấn đề của tôi là tôi không biết khi nào hoạt ảnh từ scrollRectToVisible:animated hoàn tất.Trong UITableView, làm cách nào để biết khi nào scrollRectToVisible hoàn tất cho một hàng?

Mã của tôi:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRwoAtIndexPath:indexPath]; 

    [self.tableView scrollRectToVisible:cell.frame animated:YES]; 

    //more animations here, which I'd like to start only after the previous line is finished! 
} 
+0

+1 Câu hỏi hay, nhưng tôi sợ câu trả lời là: bạn không biết khi nào 'scrollRectToVisible: animated:' finishes. – Sam

+0

Câu trả lời cho câu hỏi sau đây có thể trợ giúp ở đây: http://stackoverflow.com/questions/7198633/how-can-i-tell-when-a-uitableview-animation-has-finished – fishinear

Trả lời

3

Giao thức UITableViewDelegate phù hợp với UIScrollViewDelegate. Bạn có thể đặt BOOL tham số khi bạn di chuyển bằng tay và kiểm tra xem nó hơn trong scrollViewDidScroll:

BOOL manualScroll; 
... 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRwoAtIndexPath:indexPath]; 

    manualScroll = YES; 
    [self.tableView scrollRectToVisible:cell.frame animated:YES]; 
} 
... 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (manualScroll) 
    { 
     manualScroll = NO; 
     //Do your staff 
    } 

} 

Đừng quên để thiết lập UITableViewDelegate.

+0

Đó là khá hacky, nhưng nó có vẻ như nó sẽ làm việc, và tốt nhất bạn có thể làm cho khuôn khổ. Cảm ơn câu trả lời! –

+0

có thuộc tính 'kéo 'trên UIScrollView mà theo dõi cuộn thủ công cho bạn –

15

tôi chạy qua phương pháp UIScrollViewDelegate này:

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 
{ 
    // Do your stuff. 
} 

Chỉ gọi cho cuộn phim hoạt hình. Không được gọi cho các cuộn cảm ứng. Dường như làm việc tuyệt vời.

+0

Chỉ là những gì tôi đang tìm kiếm, cảm ơn bạn !! –

5

Một cách dễ dàng hơn là để đóng gói mã di chuyển trong một UIView animateWith [...] khối, như thế này:

[UIView animateWithDuration:0.3f animations:^{ 
    [self.tableView scrollRectToVisible:cell.frame animated:NO]; 
} completion:^(BOOL finished) { 
    // Some completion code 
}]; 

Lưu ý rằng hoạt hình == NO trong scrollRectToVisible: hoạt hình: Phương pháp.

+0

Điều này sẽ là anwser –

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