在使用UicollectionView中使用ReloDdata时,如何将标题排除在重新加载之外



我使用UICollectionView使用CSStickyHeaderFlowLayout来模拟UITableView中的标头行为。在标题内部有SegmentedControl来控制UICollectionView上的数据。因此,我想要的是在我点击段(调用API)并执行reloadData时重新加载数据,但它总是称为

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

那么,只能重新加载数据而不是标题的最佳方法是什么,因为当reloadData标题也将重新加载,并且该段将返回到第一个状态。

这是我的viewForSupplementaryElementOfKind

的代码
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
UICollectionReusableView *reusableView = nil;
    if (kind == UICollectionElementKindSectionHeader) {
        SegmentHeaderView *collectionHeader= [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"Header" forIndexPath:indexPath];
        HMSegmentedControl *segmentedControl = [[HMSegmentedControl alloc] initWithSectionTitles:@[@"Popular", @"Lelang"]];
        [segmentedControl setFrame:CGRectMake(0, 0, self.view.frame.size.width, 45)];
        [segmentedControl addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventValueChanged];
        segmentedControl.backgroundColor = [NConfig FlatButtonGray];
        segmentedControl.selectionIndicatorColor = [UIColor whiteColor];
        segmentedControl.selectionIndicatorBoxOpacity=1;
        segmentedControl.titleTextAttributes = @{NSForegroundColorAttributeName : [NConfig FlatButtonOrange]};
        segmentedControl.selectedTitleTextAttributes = @{NSForegroundColorAttributeName : [NConfig FlatButtonOrange]};
        segmentedControl.selectionStyle = HMSegmentedControlSelectionStyleBox;
        segmentedControl.selectedSegmentIndex = HMSegmentedControlNoSegment;
        segmentedControl.selectionIndicatorLocation = HMSegmentedControlSelectionIndicatorLocationNone;
        segmentedControl.shouldAnimateUserSelection = NO;
        [segmentedControl setSelectedSegmentIndex:0 animated:YES];
        [collectionHeader addSubview:segmentedControl];
        reusableView = collectionHeader;
    }
return reusableView;
}

有建议吗?:)

您的错误是,您仅将选择存储在视图层中可能会丢失。当用户选择不同的细分市场时,您确实应该设置带有新选择索引的属性。然后,您可以通过重新加载数据来对此更改的属性做出反应。在返回标头视图之前,您将所选段设置为先前存储的索引。这样,选择将永远不会丢失。

除此之外,您还应避免重新加入,而仅重新加载实际更改的项目。

相关内容

  • 没有找到相关文章

最新更新