Swift3添加按钮选择/在collectionView中查看

时间:2018-08-28 06:07:14

标签: ios swift3 uicollectionview

我正在实现一个显示图像的collectionView,当用户选择其中一个图像时,它将以largeMode打开图像。 现在,我需要在collectionView中添加一个按钮,以使用户可以选择视图模式(如上所述),也可以选择模式,用户可以出于其他目的选择多个项目。

我尝试过

  

allowsMultipleSelection

当用户选择按钮但没有效果时。

如何实现这种功能?

编辑:添加一些示例代码

这是我尝试过的:

    //button select mode
    @IBAction func Selection(_ sender: Any) {
    selectMode = !selectMode
    print("select mode is now: \(selectMode)")
    if(selectMode){
        self.navigationItem.title = "Selection de Photos"
        btnSelect.title = "Voir"
        collectionView.allowsMultipleSelection=true 
    }
    else{
        self.navigationItem.title = "Gallerie"
        btnSelect.title = "Selection"
        collectionView.allowsMultipleSelection=false
    }
}

和didselectitem

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){
    if collectionView.allowsMultipleSelection{
        print("multi selection mode activated, no preview")
    } else{
            _selectedCells.add(indexPath)
            collectionView.reloadItems(at: [indexPath])
    }
}


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(!selectMode){
        print("View mode")
        if(segue.identifier as! String == "viewLargePhoto"){
            let controller: ViewPhotoGallerie = segue.destination as! ViewPhotoGallerie
            let indexPath: NSIndexPath = self.collectionView.indexPath(for:sender as! UICollectionViewCell) as! NSIndexPath
            controller.index = indexPath.item
            controller.photosAsset = self.photosAsset
            controller.assetCollection = self.assetCollection
        }
    }
    else{
        print("Select mode")
    }
}

但是如果我处于选择模式(allowsMultipleSelection为false),则将启动预览(segue),并且我无法选择多个项目。

EDIT2:

我已经基于allowMultipleSelection状态更新了代码,仍然打开了以大模式查看图像的序列,然后无法选择多个项目。 这是我的代码:

    @IBAction func Selection(_ sender: Any) {
    selectMode = !selectMode
    print("select mode is now: \(selectMode)")
    if(selectMode){
        btnSelect.title = "Voir"
        collectionView.allowsMultipleSelection=true
    }
    else{
        btnSelect.title = "Selection"
        collectionView.allowsMultipleSelection=false
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if(!collectionView.allowsMultipleSelection){
        print("View mode")

        if(segue.identifier as! String == "viewLargePhoto"){
            let controller: ViewPhotoGallerie = segue.destination as! ViewPhotoGallerie
            let indexPath: NSIndexPath = self.collectionView.indexPath(for:sender as! UICollectionViewCell) as! NSIndexPath
            controller.index = indexPath.item
            controller.photosAsset = self.photosAsset
            controller.assetCollection = self.assetCollection
        }
    }
    else{
        print("Select mode")
    }
}

2 个答案:

答案 0 :(得分:0)

BTW核心基础是

  1. 您必须存储用户选择任何单元格的每个索引,并在用户取消选择该索引时从数组中删除该索引。
  2. 用户单击按钮时,每次您需要重新加载该单元格并将按钮状态更新为选定状态时。
  3. 当用户单击float按钮时,您需要使用索引数组来显示所选图像。

如果您不清楚该过程,请告诉我。

答案 1 :(得分:0)

在选择模式时,您需要将allowsMultipleSelection设置为true。

self.collectionView.allowsMultipleSelection = true

要管理用于选择和预览的其他操作,您可以使用以下条件进行管理

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

    if collectionView.allowsMultipleSelection {
        //selection mode
    } else {
        // vide mode
    }
}

完成选择模式后,将allowsMultipleSelection设置为false。

self.collectionView.allowsMultipleSelection = false

并使用查找所选择的indexPath

for indexPath in self.collectionView.indexPathsForSelectedItems! {

}