我有一个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];
}
}
答案 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。
您当前的代码应该完成其余的工作。