CollectionView Cell滑动以执行操作

时间:2014-05-07 05:03:56

标签: ios objective-c ios7 uicollectionview uicollectionviewcell

我正在使用UICollectionview水平布局开发社交网络应用程序,当我的应用程序启动集合视图加载最多5个单元格然后如果我刷第5个单元格然后那个时间只有第6个单元格内存将分配。以同样的方式将第6个单元格刷到第7个单元格。那么,我该如何实现这个过程

提前感谢任何建议

2 个答案:

答案 0 :(得分:2)

您需要向collectionView添加滑动手势识别器:

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGesture:)];
swipeGesture.direction = UISwipeGestureRecognizerDirectionUp;
[collectionView addGestureRecognizer:swipeGesture];

然后,处理handleSwipeGesture中的滑动:分配单元格。

-(void) handleSwipeGesture:(UISwipeGestureRecognizer *) sender
{
...
}

您可以根据需要设置滑动方向,这个是配置为up。

这几乎就是它的全部内容。主要的是你不希望方向与滚动方向滑动冲突,因为我不认为有一个干净的方法来处理。当您水平滚动时,这是一次滑动,因此您需要使用向上/向下滑动方向。

要附加到单元格(以捕获单个单元格上的手势)我会在以下方法中对简单的集合视图执行大部分时间:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
    [cell addGestureRecognizer:longPressGestureRecognizer];
    ...
}

(这是长按,但它的工作方式相同)。在将其放入单元格的情况下,您需要在单元格上放置一个标记,然后在处理程序中引用该标记以确定它来自哪个单元格:

以上是上述内容之一:

- (void) handleLongPress: (UILongPressGestureRecognizer *) sender 
{
    if (sender.state != UIGestureRecognizerStateBegan)
        return;

    CGPoint p = [sender locationInView: collectionView];
    NSIndexPath *indexPath = [collectionView indexPathForItemAtPoint:p];
    if (indexPath != nil)
    {
        UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
        if (cell)
    {
    int indexOfItem = cell.tag;
        NSLog(@"Selected item = %d", indexOfItem);
    }
}

至少在这条线上......

答案 1 :(得分:0)

您可以通过实现UIScrollViewDelegate方法

来实现此目的
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
      CGPoint offset = scrollView.contentOffset;
      CGRect bounds = scrollView.bounds;
      CGSize size = scrollView.contentSize;
      UIEdgeInsets inset = scrollView.contentInset;
      float y = offset.x + bounds.size.width - inset.right;
      float h = size.width;


      float reload_distance = 75; //distance for which you want to load more
     if(y > h + reload_distance) {
        // write your code getting the more data
        NSLog(@"load more rows");

      }
   }

当你进入集合的最后一个单元格时,将调用此滚动视图委托方法。 你可以根据你的要求改变距离。