Có thể thêm UIRefreshControl
ở cuối số UITableView
không? Tôi sẽ sử dụng nó để tải thêm dữ liệu. Xin vui lòng, Bất kỳ đề nghị?UIRefreshControl ở dưới cùng của UITableView iOS6?
Trả lời
Tôi tin rằng sẽ không có bất kỳ giải pháp đơn giản nào cho vấn đề này. Có thể ai đó có thể viết một thư viện riêng biệt để thực hiện hành vi này cộng với nó sẽ gây ra nhiều biến chứng hơn khi bạn lưu trữ dữ liệu trong tableview.
Nhưng hãy để chúng tôi chia nhỏ sự cố và có thể giúp bạn đạt được những gì bạn muốn. Tôi đã sử dụng đoạn mã sau để thêm nhiều hàng trong ứng dụng:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
if (endScrolling >= scrollView.contentSize.height)
{
NSLog(@"Scroll End Called");
[self fetchMoreEntries];
}
}
Hoặc bạn có thể làm điều gì đó như thế:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height)
{
if (!self.isMoreData)
{
self.MoreData = YES;
// call some method that handles more rows
}
}
}
Bạn phải đã thấy phương pháp như vậy trong nhiều câu hỏi như tôi đã mô tả ở trên và chắc chắn không phải những gì bạn đã yêu cầu. Nhưng những gì bạn có thể làm là trong khi mã trên đang trong quá trình tải nhiều dữ liệu hơn, bạn có thể thêm một subview và hiển thị một vài hình ảnh tương tự như những gì UIRefreshControl cung cấp. Thêm hình ảnh trong subview sẽ được hiển thị như một tiến trình cho đến khi mã trên được thực hiện. Trang chủ này giúp.
Nhân tiện, tôi sẽ đề nghị bạn không làm điều đó vì nó sẽ lãng phí thời gian của bạn để làm một cái gì đó nhỏ hơn trừ khi bạn chỉ làm việc đó cho mục đích học tập.
Trên thực tế, khung công tác Bảng nhạy cảm miễn phí cung cấp chức năng này ra khỏi hộp. Bạn chỉ định số lô và nó sẽ tự động tìm nạp dữ liệu, hiển thị ô cuối cùng dưới dạng ô 'tải thêm'. Khi bạn nhấp vào ô đó, nó sẽ tự động tải lô tiếp theo, v.v. Đáng xem xét.
Bạn có thể sử dụng UIView để tùy chỉnh refreshControl của bạn ở dưới cùng. Tạo UIView và thêm nó vào UITableView dưới dạng footerView.
UIView* footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
[footerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"refreshImage.png"]]];
tableView.tableFooterView = footerView;
Hide nó: tableView.tableFooterView.hidden = YES;
Thực hiện UIScrollView đại biểu -
(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height)
{
tableView.tableFooterView.hidden = NO;
// call method to add data to tableView
}
}
trước khi thêm dữ liệu để tableView tiết kiệm hiện tại bù đắp bởi CGPoint offset = tableView.contentOffset;
reloadData cuộc gọi sau đó thiết lập lưu trước đó bù đắp lại tableView [tableView setContentOffset:offset animated:NO];
Để bạn có thể cảm thấy dữ liệu mới được thêm ở dưới cùng.
Bất cứ ai đã thử điều đó? nó có hoạt động không? – Ricardo
Tôi đang sử dụng ứng dụng này trên ứng dụng iOS 7 và có vẻ như nó hoạt động. Tôi thực sự đang đặt 'tableFooterView' của mình thành chế độ xem 'UIRefreshControl'' – hunteros
xin lỗi,' UIActivityIndicatorView' không phải là 'UIRefreshControl'! – hunteros
Gần đây tôi đã gặp vấn đề tương tự và viết một danh mục cho lớp UIScrollView. Đây là CCBottomRefreshControl.
Có sự phụ thuộc ReactiveCocoa, vì vậy nó vô dụng. –
Làm việc hoàn hảo cho tôi. Tất cả các phương pháp sử dụng phương pháp UIScrollViewDelegate là một nỗi đau trong ass về hiệu suất. Phương pháp này sử dụng phần tử UIRefreshControl mặc định, tốt hơn nhiều so với mọi cách tiếp cận khác mà tôi gặp phải. – marcelosalloum
Nhưng tôi đang gặp vấn đề. Tôi không thể xóa UIRefreshcontroller sau khi tải dữ liệu. [refreshController endRefreshing] không làm gì cả. –
Đối với UITableView tôi đề nghị các phương pháp sau đây:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// if this is the last row that we have in local data
// and we didn't reach the total count of rows from the server side
if (count == indexPath.row+1 && count < total)
{
// .. fetch more rows and reload table when data comes
}
}
Tôi không sử dụng các phương pháp xem cuộn cố ý vì xem cuộn là chậm. Điều đó xảy ra khi cuộn chế độ xem cuộn, chúng tôi yêu cầu thêm dữ liệu, làm mới nhiều hàng hơn và chế độ xem cuộn chưa hoàn tất với cuộn, nó vẫn giảm tốc và gây ra sự cố khi tìm nạp thêm dữ liệu.
hãy giải thích ngắn gọn @Prcela –
Câu trả lời sau nằm trong Xcode 8 và Swift 3.
khai báo đầu tiên
var spinner = UIActivityIndicatorView()
hơn trong viewDidLoad
phương pháp viết đoạn mã sau:
spinner = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
spinner.stopAnimating()
spinner.hidesWhenStopped = true
spinner.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 60)
tableView.tableFooterView = spinner
bây giờ cuối cùng override
phương pháp scrollViewDidEndDragging
đại biểu với sau:
override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
let offset = scrollView.contentOffset
let bounds = scrollView.bounds
let size = scrollView.contentSize
let inset = scrollView.contentInset
let y = offset.y + bounds.size.height - inset.bottom
let h = size.height
let reloadDistance = CGFloat(30.0)
if y > h + reloadDistance {
print("fetch more data")
spinner.startAnimating()
}
}
Đây là câu trả lời đúng nhất trong năm nay. Tôi đã được sử dụng CCBottomRefreshControl cho đến khi tôi đã phải convetr dự án của tôi để nhanh chóng 3,0 và nó bắt đầu đâm ở khắp mọi nơi. Đây là một giải pháp tốt hơn nhiều. Cảm ơn bạn! –
Người đàn ông, bạn đã cứu ngày của tôi. Đây là giải pháp tốt nhất cho nhanh 3 –
Vui lòng khai báo quan hệ của bạn với khung này (nếu có) tại thời điểm này đọc như nó có thể là thư rác. – ChrisF
Không liên kết theo bất kỳ cách nào !! Chỉ là một fan hâm mộ lớn! – Matt
Tôi đã tìm ra điều đó - nhưng có thể không. – ChrisF