2012-01-09 25 views
7

Tôi đang thực hiện thay đổi đối với tableView bằng cách sử dụng khối beginUpdates/endUpdates. Trong suốt cách tôi cần cập nhật một bóng đổ để nó phản ánh thành phần hiện tại của tableView.UITableView beginUpdates/endUpdates gọi lại

Tôi đã cố gắng thiết lập KVO cho tableView contentSize nhưng nó chỉ được gọi là endUpdates, sau khi hoạt ảnh kết thúc. Những gì tôi muốn cho nó được gọi là mỗi khi thay đổi contentSize (ngay cả khi nó chỉ bằng một pixel). Có bất kì cách nào để đạt được điều này không?

Trả lời

0

Xin lỗi để nói, tôi không nghĩ bạn có thể làm điều này. Khi bạn thực hiện các thay đổi đối với bảng sau beginUpdates đã được gọi là các thay đổi được làm động dưới dạng một hoạt ảnh đơn lẻ sau endUpdates. Không có hoạt ảnh gọi lại trong các hoạt ảnh này. Tôi đã không cố gắng này vì vậy không biết nếu nó sẽ làm việc tốt cho điều này nhưng bạn có thể thử làm tổ beginUpdatesendUpdates và cập nhật bóng của bạn sau mỗi endUpdates.

+2

Just FYI: lời gọi của beginUpdates và endUpdates có thể được lồng vào nhau. Nếu bạn không thực hiện lệnh chèn, xóa và lựa chọn bên trong khối này, các thuộc tính bảng chẳng hạn như số lượng hàng có thể trở thành không hợp lệ. –

+0

Bạn có ví dụ về cách sử dụng các cuộc gọi lồng nhau không? – Rivera

24

Điều này thì sao?

[CATransaction begin]; 

[CATransaction setCompletionBlock:^{ 
    // animation has finished 
}]; 

[tableView beginUpdates]; 
// do some work 
[tableView endUpdates]; 

[CATransaction commit]; 
+0

đã làm điều đó cho tôi! cảm ơn! – horseshoe7

+1

wow! mà hầu hết các công trình nhưng có một sự chậm trễ giữa tableview kết thúc cập nhật và khối hoàn thành đang chạy. Bây giờ tôi sẽ sử dụng nó. Cảm ơn. – SpaceDog

1

Phương pháp của Rudolf không làm việc cho tôi trơn tru như mong đợi. Trong trường hợp của tôi, tôi đã chọn một hàng trên UITableView bằng cách này, và phương pháp của Rudolf đã khiến bàn làm hai hoạt ảnh với một chút đóng băng: hoạt ảnh bên trong beginUpdates/endUpdates, đóng băng một chút và hoạt ảnh trên khối hoàn thành.

[tableView selectRowAtIndexPath:indexPath 
         animated:YES 
        scrollPosition:scrollPosition]; 

truyền cảm hứng cho tôi để tạo ra mã này ... và điều này đang làm việc liên tục:

[UIView animateWithDuration:0.0 animations:^{ 
    [tableView beginUpdates]; 
    // do something to the table 
    [tableView endUpdates]; 
} completion:^(BOOL finished) { 
    // Code to run when table updates are complete. 
}]; 
Các vấn đề liên quan