【问题标题】:Swift3 adding a button Select / View in collectionViewSwift3在collectionView中添加一个按钮Select / View
【发布时间】:2019-02-02 16:33:57
【问题描述】:

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

我试着玩

允许多重选择

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

我怎样才能实现这样的功能?

编辑:添加一些示例代码

这是我尝试过的:

    //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)并且我无法选择多个项目。

编辑2:

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

    @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")
    }
}

【问题讨论】:

  • 你能告诉我们你尝试过的代码吗?

标签: ios swift3 uicollectionview


【解决方案1】:

在选择模式时,您必须将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! {

}

【讨论】:

  • 我试图实现你的代码(包含在我最初的问题中),但是即使我将allowMultipleSelection设置为true,预览也会打开,我怎样才能禁用预览(启动viewController)让用户选择它的项目?
  • 您可以使用if collectionView.allowsMultipleSelection 条件来识别view modeselection mode
  • 我试图在我的准备 segue 函数中更改我的 if 语句并将其替换为 allowMultipleSelection 但仍调用 viewController,是否还有其他调用 viewController 的地方?
  • 我已经添加了链接的两个函数
  • 看起来一切都很好...但是请检查您的collectionView IBOutlet 与您的collectionView 布局连接。
【解决方案2】:

BTW 核心基础是

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

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

【讨论】:

  • 谢谢,但这没关系,但我需要让用户默认查看详细图像,并且只有在最终用户选择“多选”按钮以禁用显示详细图片的 viewController 并让他选择了多个项目
  • @tiamat 我认为您在谈论原生照片的方式。当用户选择Select 时,只有 n 用户可以选择图像。为此,您需要在单击Select 按钮时切换选择模式。当用户单击Select 按钮时,启用选择模式,否则关闭选择。 When selection mode is on you have to implement above procedure.
  • 刚刚在我最初的问题中添加了示例代码,希望它会更清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 2013-09-16
相关资源
最近更新 更多