2010-03-01 8 views
12

Làm cách nào để cuộn UITableView đến một vị trí cụ thể bằng hoạt ảnh?iPhone SDK - Cách cuộn UITableView theo chương trình với hoạt ảnh?

Hiện nay tôi đang sử dụng mã này để chuyển đến một vị trí:

//tableController -> viewDidLoad 
[self.tableView reloadData]; 
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0]; 
[self.tableView scrollToRowAtIndexPath:indexPath 
         atScrollPosition:UITableViewScrollPositionTop 
           animated:YES]; 

Vấn đề với mã này là, bàn nhảy ngay vào đúng vị trí mà không cần bất kỳ hình ảnh động. Có cách nào để bật hoạt ảnh hoặc đặt thời lượng không?

Cảm ơn bạn đã được trợ giúp.

Trả lời

0

Tôi có hai gợi ý để bạn có thể điều tra:

  1. bạn đang chạy ứng dụng của bạn trên mô phỏng hoặc iPhone chính nó? Tôi đã nhận thấy một số hình ảnh động hoạt động khác nhau trong trình mô phỏng.

  2. Có thể bạn đang gọi scrollToRowAtIndexPath: atScrollPosition: hoạt ảnh hai lần liên tiếp nhanh chóng? Điều này có thể 'gây nhầm lẫn' hoạt ảnh. Bạn chỉ nên gọi hàm này một lần trong khi xử lý một sự kiện cụ thể.

+0

Cảm ơn bạn đã trả lời. Tôi đang chạy mã trên thiết bị và gọi mã này trong phương thức viewDidLoad. – dan

+0

Có thể vì lý do gì đó, không thể khởi động hoạt ảnh từ viewDidLoad vì đây là một phần của quá trình khởi tạo khung nhìn. Tôi không nói rằng tôi biết tại sao chính xác như vậy, nhưng nó có vẻ hợp lý. Hãy thử lên lịch sự kiện với performSelector của NSRunLoop và thực hiện cuộn của bạn khi được gọi. – richb

5

Hãy thử nhận xét cuộc gọi reloadData. Nếu tôi hiểu chính xác câu hỏi của bạn và bạn đang ở trong viewDidLoad, bạn không cần phải gọi nó ngay.

Ngoài ra, nếu bạn vừa mới thực hiện việc đẩy bộ điều khiển chế độ xem, bạn sẽ không nhận được cuộn động. Bạn sẽ phải chèn một sự chậm trễ (tôi đã tìm thấy một phần tư thứ hai hoạt động tốt) giữa thời gian mà viewDidLoad được gọi và khi hoạt hình của bạn bắt đầu.

23

Nó hoạt động tốt đối với tôi:

-(void) viewDidAppear:(BOOL)animated{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:n inSection:0]; 
    [self.tableView scrollToRowAtIndexPath:indexPath 
        atScrollPosition:UITableViewScrollPositionTop 
          animated:YES]; 

} 

Để chắc chắn rằng điều này được gọi là một lần duy nhất, bạn có thể làm cho một xác minh như thế này:

if(!isInitialized){ 
    isInitialized = YES; 
    .... 
} 
0

Tôi biết đó là có lẽ đã quá muộn, nhưng có lẽ đó là trợ giúp cho người khác, bây giờ bạn có thể cuộn một bảng chỉ bằng [tableView scrollsToTop].