Tôi đang cố gắng tạo một UITableView với ngày tháng, không nên rất thú vị, tôi biết. Nó bắt đầu vào ngày hiện tại, nhưng người dùng sẽ có thể cuộn xuống (tương lai) trở lên (quá khứ) theo ý muốn của họ. Điều này dẫn đến một số hàng có khả năng vô hạn. Vì vậy, cách để đi về việc tạo ra điều này là gì?Cuộn vĩnh viễn UITableView
Trả lại NSIntegerMax
vì số lượng hàng đã treo ứng dụng, nhưng ngay cả khi không, vẫn không tính đến việc có thể cuộn lên. Tôi có thể bắt đầu một nửa cách của khóa học, nhưng cuối cùng có một tối đa.
Bất kỳ ý tưởng nào về cách thực hiện hoặc giả mạo điều này? Tôi có thể cập nhật/tải lại bảng bằng cách nào đó mà không có người dùng chú ý, vì vậy tôi không bao giờ chạy vào một biên giới?
GIẢI PHÁP:
Tôi đã đi với đề xuất của @ ender và tạo một bảng với số lượng cố định ô. Nhưng thay vì tải lại nó khi người dùng cuộn đến gần các cạnh của các ô cố định, tôi đã đi với tải lại bảng khi cuộn cuộn để dừng lại. Để phù hợp với một người dùng di chuyển khoảng cách lớn mà không dừng lại, tôi chỉ tăng số lượng hàng lên 1000, đặt hằng số ROW_CENTER lên 500. Đây là phương thức sẽ xử lý việc cập nhật các hàng.
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSArray *visible = [self.tableView indexPathsForVisibleRows];
NSIndexPath *upper = [visible objectAtIndex:0];
NSIndexPath *lower = [visible lastObject];
// adjust the table to compensate for the up- or downward scrolling
NSInteger upperDiff = ROW_CENTER - upper.row;
NSInteger lowerDiff = lower.row - ROW_CENTER;
// the greater difference marks the direction we need to compensate
NSInteger magnitude = (lowerDiff > upperDiff) ? lowerDiff : -upperDiff;
self.offset += magnitude;
CGFloat height = [self tableView:self.tableView heightForRowAtIndexPath:lower];
CGPoint current = self.tableView.contentOffset;
current.y -= magnitude * height;
[self.tableView setContentOffset:current animated:NO];
NSIndexPath *selection = [self.tableView indexPathForSelectedRow];
[self.tableView reloadData];
if (selection)
{
// reselect a prior selected cell after the reload.
selection = [NSIndexPath indexPathForRow:selection.row - magnitude inSection:selection.section];
[self.tableView selectRowAtIndexPath:selection animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
Các phá vỡ kỳ diệu khi người dùng cuộn đến mép của bảng mà không dừng lại, nhưng với quan điểm bảng bounces
sở hữu tàn tật, điều này chỉ đơn thuần là cảm giác giống như một trục trặc nhỏ, nhưng hoàn toàn chấp nhận được. Như mọi khi, cảm ơn StackOverflow!
Vui lòng thử mã trong câu trả lời của tôi bên dưới. Nó sử dụng một logic đơn giản. –