为CollectionView完成cellForItemAtIndexPath后执行网络请求?

时间:2017-06-15 09:05:12

标签: ios objective-c networking uicollectionview

我有一个集合视图,其中根据int的数组填充单元格。

创建单元格后,我想通过网络请求检查每个单元格的参数。

目前,我在此方法中为每个单元执行网络请求,并且由于网络不一致而导致在分配参数之前创建单元。

是否有方法在完成布局单元格时运行网络功能(sendGetPar :)?显然,当用户滚动等时,可以重复使用它。

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    BOOL isFocusOn = [_userDefault boolForKey:@"mixFocusOn"];
    if (isFocusOn == TRUE) {
        CDCChannelStrip *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
        NSNumber *setChan = [self.focusChannels objectAtIndex:indexPath.section];
        NSInteger chanInt = [setChan intValue] +1;
        cell.clipsToBounds = YES;
        [cell initData:(chanInt)];
        [self.mixMonitorView setChannelsStripToType:(cell)];
        [self.mixMonitorView sendGetPar:chanInt];
        return cell;
}

2 个答案:

答案 0 :(得分:0)

我相信Apple的documentation会有所帮助 可能的方法: collectionView:didEndDisplayingCell:forItemAtIndexPath:

  

告诉委托指出已从集合视图中删除指定的单元格。

collectionView:didUpdateFocusInContext:withAnimationCoordinator:

  

告诉代理人发生了焦点更新。

答案 1 :(得分:0)

Something like this:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    BOOL isFocusOn = [_userDefault boolForKey:@"mixFocusOn"];
    if (isFocusOn == TRUE) {
        CDCChannelStrip *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
        NSInteger chanInt = indexPath.row +1;
        cell.clipsToBounds = YES;
        [cell initData:(chanInt)];
        [self.mixMonitorView setChannelsStripToType:(cell)];
        [self.mixMonitorView sendGetPar:chanInt];
        return cell;
}
-(void) sendGetPar:(NSInteger)index // you could return the parameter via this method. 
{
    NSLog(@"Parameter:%ld", (long)index);
}