ios – 如何以编程方式在UICollectionVI中插入单元格?

前端之家收集整理的这篇文章主要介绍了ios – 如何以编程方式在UICollectionVI中插入单元格?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个UICollectionView,它的工作正常,但我想以编程方式将几个UICollectionViewCells项目添加到集合视图中.

那么我该如何实现呢?

进一步澄清:当我以编程方式表示时,是指在运行时插入一个单元格,当一个动作被触发时,而不是当该应用程序加载时(使用viewDidLoad方法).我知道模型何时被更新,并且在insertItemsAtIndexPaths:方法调用UICollectionView.它应该创建一个新的单元格,但它不是这样做,它会抛出一个错误.

解决方法

参考 UICollectionView documentation

You can accomplish:

Inserting,Deleting,and Moving Sections and Items To insert,delete,
or move a single section or item,follow these steps:

  1. Update the data in your data source object.
  2. Call the appropriate method of the collection view to insert or delete the section or item.

It is critical that you update your data source before notifying the
collection view of any changes. The collection view methods assume
that your data source contains the currently correct data. If it does
not,the collection view might receive the wrong set of items from
your data source or ask for items that are not there and crash your
app. When you add,or move a single item programmatically,the
collection view’s methods automatically create animations to reflect
the changes. If you want to animate multiple changes together,though,
you must perform all insert,or move calls inside a block and
pass that block to the performBatchUpdates:completion: method. The
batch update process then animates all of your changes at the same
time and you can freely mix calls to insert,or move items
within the same block.

从你的问题:你可以例如注册一个手势识别器,并插入一个新的单元格
做如下:

// in .h 
@property (nonatomic,strong) NSMutableArray *data;

// in .m 
@synthesize data
// 

- (void)ViewDidLoad{
      //.... 

    myCollectonView.dataSource = self;
    myCollectionView.delegate = self; 
    data = [[NSMutableArray alloc] initWithObjects:@"0",@"1",@"2" @"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",nil];

    UISwipeGestureRecognizer *swipeDown = 
     [[UISwipeGestureRecognizer alloc] 
       initWithTarget:self action:@selector(addNewCell:)];
    swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
        [self.view addGestureRecognizer:swipeDown];
    //.. 
} 


-(void)addNewCell:(UISwipeGestureRecognizer *)downGesture {
    NSArray *newData = [[NSArray alloc] initWithObjects:@"otherData",nil];
    [self.myCollectionView performBatchUpdates:^{
        int resultsSize = [self.data count]; //data is the prevIoUs array of data
        [self.data addObjectsFromArray:newData];
        NSMutableArray *arrayWithIndexPaths = [NSMutableArray array];

        for (int i = resultsSize; i < resultsSize + newData.count; i++) {
            [arrayWithIndexPaths addObject:[NSIndexPath indexPathForRow:i 
                                                              inSection:0]];
        }
        [self.myCollectionView insertItemsAtIndexPaths:arrayWithIndexPaths];
    } completion:nil];

}

猜你在找的iOS相关文章