2012-04-22 34 views
39

Tôi muốn thực hiện tiếp theo:UITableView di chuyển đến ô

Tôi có UITableView phải phân tách các từ (A-Z).

Hiện tại khi lượt xem đã tải, tôi có một ô được hiển thị (và điều này là chính xác). Từ đầu tiên hiển thị di động từ các từ mảng của tôi.

Mục đích: Tôi muốn di chuyển đến ô phải hiển thị 10 từ từ mảng của tôi, nhưng vấn đề là ô có indexPath.row = 10 không tồn tại (và điều này đúng, vì tôi chưa cuộn).

Đợi là gì để thực hiện chuyển đổi từ 1 đến 10 ô.

Tôi nghĩ rằng nếu tôi không sử dụng dequeueReusableCellWithIdentifier để tạo ô của mình, tôi có thể thực hiện và giải quyết sự cố của mình, nhưng ý tôi là vấn đề này đối với bộ nhớ thiết bị.

Nói cách khác, tôi cần phải thực hiện scrollToRowAtIndexPath

Cảm ơn!

Trả lời

81

Bạn có quyền xác định phương thức scrollToRowAtIndexPath. Vì vậy, tất cả các bạn cần làm là tạo ra một indexPath tươi với hàng bạn muốn chuyển sang, ví dụ, chỉ số hàng = 10:

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:10 inSection:indexPath.section] 
      atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 
+0

cảm ơn phản hồi, nhưng làm cách nào tôi có thể cuộn tại indexPath chưa tồn tại? –

+0

Bây giờ tôi tự hỏi nếu tôi hiểu câu hỏi ban đầu của bạn. Theo tôi hiểu bảng của bạn có thể có nhiều ô, ví dụ: 100, nhưng chỉ có khoảng 10 ô được hiển thị cùng một lúc. Mặc dù không có 100 hàng thực tế trong bộ nhớ (do tái sử dụng ô), nhưng vẫn ổn khi cuộn theo chương trình đến một hàng chưa được hiển thị. Ví dụ: hàng 50. – arooaroo

+0

cảm ơn một lần nữa. Bây giờ tôi đã giải quyết vấn đề này, nhưng scrollToRowAtIndexPath với animatio NO không hoạt động được nêu ra. Do đó nếu hoạt hình YES everething hoạt động tốt. –

4
//For iOS 7 
     [self.TableView reloadData]; 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:1]; 
     [TableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
1

Người ta có thể xác định được hàng (trong ví dụ dưới đây nó được. forRow) cần được hiển thị và tải lại hàng. Sau khi hoàn thành một trong đó có thể di chuyển đến hàng đó.

let moveToIndexPath = NSIndexPath(forRow: forRow, inSection: 0) 
self.tableView.reloadRowsAtIndexPaths([moveToIndexPath], withRowAnimation: .None) 
self.tableView.scrollToRowAtIndexPath(moveToIndexPath, atScrollPosition: atScrollPosition, animated: true) 
Các vấn đề liên quan