2013-02-05 30 views
17

thể trùng lặp:
Is it possible to refresh a single UITableViewCell in a UITableView?Làm thế nào để cập nhật một UITableViewCell mà không cần tải lại toàn bộ bảng

Trong một chuỗi Tôi cập nhật chỉ có một đối tượng cụ thể trong dữ liệu danh sách của tôi (NSMutableArray), một lần cập nhật giá trị của nó, Để cập nhật GUI, tôi đã tải lại toàn bộ bảng như dưới đây ...

[table reloadData]; 

Nó hoạt động tốt, Tuy nhiên ở điểm hiệu quả, nó được treo một chút trong khi tôi đang di chuyển, Có cách nào để cập nhật chỉ một ô cụ thể mà không cần tải lại bảng đầy đủ không?

cảm ơn.

+2

Bạn có thể kiểm tra điều này nếu nó giúp giải quyết vấn đề của bạn http://stackoverflow.com/questions/7040740/reload-spefic-table-cell-ios – Rushi

Trả lời

31
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; 

Sử dụng này

+0

nó làm việc, nhưng vẫn còn tình trạng đóng băng là có khi di chuyển cho bản cập nhật này cũng .. – Newbee

+0

Tế bào của bạn có hình ảnh không? – amar

+2

Sử dụng tải chậm cho họ – amar

0

Nếu bạn chỉ cần thêm một mục, và bạn muốn có mà bổ sung vào bảng, bạn có thể tự chèn nó vào UITableView của bạn, sau đây là một ví dụ:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_directions.count-1 inSection:0]; 
NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:YES]; 
+0

Tôi đã thêm rằng đối tượng cần phải cập nhật giá trị của nó – Newbee

+0

Xem câu trả lời của tôi sau đó @newbee – amar

1

Khi bạn đang thực hiện cập nhật GUI, tốt hơn là sử dụng reloadData thay vì sau đó sử dụng bất kỳ phương pháp nào khác. reloadData là cách tốt nhất trong trường hợp của bạn để cập nhật UITableView vì nó tránh sự không thống nhất. Điều khác mà bạn có thể làm là, bạn có thể thêm một điều kiện trong cellForRowAtIndexPath của bạn và để cho thực hiện xảy ra chỉ cho các tế bào được sửa đổi.

+1

Điều này là sai. Có một số cách để cập nhật các phần của UITableView. reloadRowsAtIndexPaths, reloadSections và reloadSectionsWithIndexTitles sẽ tải lại tất cả các phần của UITableView. – Fogmeister

+1

@Lưu ý câu của tôi là không chính xác. Tôi muốn nói điều kiện trong đó Newbee đang cố gắng sử dụng nó. Tôi đã chỉnh sửa câu trả lời của mình. – Rushi

1

Bạn có thể lấy đối tượng tế bào bằng -

UITableViewCell *cell = [table cellForRowAtIndexPath:indexPath]; 

bây giờ thay đổi giá trị của nó có liên quan theo đối tượng của bạn từ mảng dữ liệu. Nó sẽ phản ánh trong bảng. Hy vọng điều này sẽ hữu ích.

9

Bạn có thể sử dụng này ..

NSArray *indexPathArray = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:1 inSection:0]]; 
//You can add one or more indexPath in this array... 

[tblview reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationFade]; 
2

Bạn có thể tải lại hàng hình ảnh cụ thể sử dụng đường dẫn chỉ mục.

[mainTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
         withRowAnimation:UITableViewRowAnimationNone]; 
Các vấn đề liên quan