versuchen, mehr Daten zu überprüfen nicht in cellForRowAtIndexPath aber in UIScrollViewDelegate zu - [Datamodel sharedMyLibrary] meine Datenquelle Videodaten Laden von Klassen mit RESTful API mit Paginierung ist, dann ist es fetchWithCompletion Methode in Asynchron-Daten vom Server holt, dann ist es hasMore Methode sagt, dass der Server mehr Daten hat (JSON enthält den nächsten Link) LibraryTableViewController - ist eine Unterklasse des UITableViewControllers, hasMore - ist die Ansicht am unteren Ende der Tabellenansicht im Storyboard, die eine Schaltfläche enthält, sodass der Benutzer zwei Optionen hat: scrollen Sie nach unten oder drücken Sie die Taste. Wenn diese Ansicht sichtbar ist, bedeutet dies auch, dass auf dem Server mehr Daten vorhanden sind. _canFetch verhindert das geschachtelte Laden vom Server.
``
@interface LibraryTableViewController() <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIView *hasMore;
@end
@implementation LibraryTableViewController
{
__block volatile uint8_t _canFetch;
}
@synthesize hasMore = _hasMore;
- (void)viewDidLoad
{
_canFetch = 0x80;
[super viewDidLoad];
[self fetchVideos:NO];
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
CGPoint offset = [scrollView contentOffset];
if ([[DataModel sharedMyLibrary] hasMore])
{
if (((velocity.y > 0.0) && (offset.y > (*targetContentOffset).y)) || ((velocity.x > 0.0) && (offset.x > (*targetContentOffset).x)))
{
[self fetchVideos:NO];
}
}
else
{
[_hasMore setHidden:YES];
}
}
- (IBAction)moreVideos:(UIButton *)sender
{
[self fetchVideos:NO];
}
- (IBAction)doRefresh:(UIRefreshControl *)sender
{
[sender endRefreshing];
[[DataModel sharedMyLibrary] clear];
[self fetchVideos:YES];
}
- (void)fetchVideos:(BOOL)reload
{
if (OSAtomicTestAndClear(0, &(_canFetch)))
{
__weak typeof(self) weakSelf = self;
[[DataModel sharedMyLibrary] fetchWithCompletion:^(NSArray *indexPathes) {
dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(self) strongSelf = weakSelf;
if (indexPathes != nil)
{
if (reload)
{
[[strongSelf tableView] reloadData];
}
else
{
[[strongSelf tableView] beginUpdates];
[[strongSelf tableView] insertRowsAtIndexPaths:indexPathes withRowAnimation:UITableViewRowAnimationAutomatic];
[[strongSelf tableView] endUpdates];
}
}
else
{
[[strongSelf tableView] reloadData];
}
[strongSelf->_hasMore setHidden:![[DataModel sharedMyLibrary] hasMore]];
strongSelf->_canFetch = 0x80;
});
}];
}
}
``
Funktioniert nicht in Swift 4 –
@UtuDalmaz Können Sie mir bitte sagen, was genau nicht funktioniert? –
Binärer Operator '==' kann nicht auf Operanden vom Typ 'UIScrollView' und '_' angewendet werden –