UICollectionView在同一个UICollectionViewCell上进行Segues和Multiple Selection

时间:2015-10-28 09:11:06

标签: ios uicollectionview multipleselection

我有一个UICollectionView。如果我触摸一个单元格,它会触发一个segue。如果"垃圾"或者"保存"启用后,用户应该能够触摸单元格以添加到为相应操作处理的数组。

启用垃圾/保存时,segue会触发,而不是允许多次选择。我该怎么做才能有2种模式:1表示segues,1表示多重选择。

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{

    if (self.saveEnabled == YES) {
        NSArray *itemsToDelete = [self.collectionView indexPathsForSelectedItems];

        [self.itemsArray addObjectsFromArray:itemsToDelete];
    }

    else if (self.trashEnabled == YES) {
        NSArray *itemsToDelete = [self.collectionView indexPathsForSelectedItems];
        [self.itemsArray addObjectsFromArray:itemsToDelete];
    }
    else{
        [self performSegueWithIdentifier:@"collectionUnwind" sender:self];

    }
}

2 个答案:

答案 0 :(得分:1)

关键步骤是,在多选模式下,您需要在shouldPerformSegueWithIdentifier中返回false。

这是我迅速进行此操作的方法:

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    return !self.collectionView.allowsMultipleSelection
}

长按我可以在单选模式和多选模式之间切换,您可以使用按钮来做同样的事情。

func setupLongPressGesture() {
    let longPressGesture:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(self.handleLongPress))
    longPressGesture.minimumPressDuration = 1.0 // 1 second press
    longPressGesture.delegate = self
    self.collectionView.addGestureRecognizer(longPressGesture)
}

@objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer){
    if gestureRecognizer.state == .began {
        self.labelState.text = "multiple selection enabled"
    } else if gestureRecognizer.state == .ended {
        self.collectionView.allowsMultipleSelection = !self.collectionView.allowsMultipleSelection
    }
}

我在这里参考该教程:https://www.appcoda.com/ios-collection-view-tutorial/

答案 1 :(得分:0)

不确定你真正想要的是什么。准确地告诉我们你做了什么(按钮)以及删除(或保存)多个单元格的顺序。

顺便说一下,您是否在集合视图中启用了多个选择?

[self.collectionView setAllowsMultipleSelection:YES];

编辑:

在你的故事板中,只需添加一个带有" collectionUnwind"从当前ViewController(而不是其CollectionView的单元格)到要推送的新ViewController的标识符。如果将它链接到单元格,Xcode将假设您需要在每个单元格选择上推送新的ViewController。

您当前的代码应该完成其余的工作。