2011-10-29 39 views
10

Tôi có nhật ký cuộn có khả năng cuộn rất dài trong UITableView Người dùng có thể điều hướng bảng bằng cách cuộn.iPhone UITableView Thêm nội dung ở trên cùng mà không cần cuộn

Điều tôi đang cố gắng làm là thêm nội dung mới ở đầu bảng. Nếu đầu bảng là hiển thị, thì hàng mới sẽ đẩy phần còn lại của nội dung xuống. Nhưng nếu hàng đầu tiên của bảng là không hiển thị, bảng sẽ âm thầm thêm một hàng khác lên trên mà không cần cuộn.

Tôi đang làm việc này để ngăn việc di chuyển bảng lên đầu từ việc làm gián đoạn người dùng dữ liệu duyệt web. Nếu tôi yêu cầu bảng chỉ cần di chuyển đến điểm chèn mới, vị trí của người dùng trong bảng sẽ bị mất, làm phiền người dùng.

Một trong những cách tôi có thể thử thực hiện điều này là bằng cách chèn dữ liệu vào NSMutableArray tại chỉ mục 0. Công việc này có được không? Một câu hỏi bổ sung: cách chèn dữ liệu đắt tiền vào đầu NSMutableArray. Tôi hy vọng rằng hoạt động đó được tối ưu hóa, nhưng muốn đảm bảo. Tôi đang thiếu gì với việc triển khai này?

Cảm ơn bạn!

+0

có thể trùng lặp [Giữ uitableview tĩnh khi chèn hàng ở trên cùng] (http: // stackoverflow.com/questions/4279730/keep-uitableview-static-khi-chèn-hàng-at-the-top) – BB9z

Trả lời

13

Làm thế nào để chèn mà không cần chạm điểm:

  • Sử dụng tableView 's (UIScrollView) contentOffset giá trị để tìm nơi người dùng hiện đang cuộn tới.
  • Thêm hàng mới ở phía trên, với animated:NO
  • Cập nhật các 's contentOffsettableView là nơi người dùng đang ở cộng với bất cứ chiều cao của hàng của bạn.

Làm thế nào để tránh gây ra các vấn đề làm điều này khi người dùng đang kéo:

  • Theo dõi khi người dùng kéo, và nếu bạn muốn chèn hàng trong một kéo/chuyển động, thêm chúng vào một hàng đợi được thực hiện sau khi người dùng phát hành.
+1

Một cái gì đó nói với tôi rằng điều này đã được bao quanh với [tableView beginUpdates] và [tableView endUpdates] để làm việc liên tục. Tôi có đúng không? –

+0

Tôi không tin như vậy, mặc dù tôi thậm chí không sử dụng những phương pháp đó. Hãy thử nó mà không có và xem những gì sẽ xảy ra. – Tim

+1

Thay vì sử dụng InsertCell, bạn thêm chiều cao của ô vào khoảng trống đã lưu của bạn. Cuối cùng, reloadData và cập nhật thành offset đã lưu. Xem thêm: http://stackoverflow.com/questions/4279730/keep-uitableview-static-when-inserting-rows-at-the-top/9121544#9121544 –

2

Chỉ cần đăng một câu trả lời với đoạn mã ở đây

Keep uitableview static when inserting rows at the top

Về cơ bản:

  • Save the cuộn bù đắp nơi bạn đã có thể gọi BeginUpdate :.
  • Thay cho các cuộc gọi đến InsertCell, bạn thêm chiều cao của ô vào mức bù đã lưu.
  • Nơi bạn sẽ gọi là endUpdate :, gọi reloadData, sau đó cuộn bằng khoảng trống đã lưu bằng hoạt ảnh NO.
6
CGSize beforeContentSize = self.tableView.contentSize; 
      [self.tableView reloadData]; 
      CGSize afterContentSize = self.tableView.contentSize; 

      CGPoint afterContentOffset = self.tableView.contentOffset; 
      CGPoint newContentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + afterContentSize.height - beforeContentSize.height); 
      self.tableView.contentOffset = newContentOffset; 
Các vấn đề liên quan