Swift3 добавление кнопки Select / View в collectionView - PullRequest
0 голосов
/ 28 августа 2018

Я реализую 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
    }
}

и для дидселекта

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

, но если я нахожусь в режиме выбора (допускает значение MultipleSelection в 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 голосов
/ 28 августа 2018

Во время режима выбора вы должны установить allowsMultipleSelection как истинное значение.

self.collectionView.allowsMultipleSelection = true

Чтобы управлять различными действиями для выбора и предварительного просмотра, вы можете управлять этим, используя условие ниже

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

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

После завершения выбора режима установите allowsMultipleSelection как ложное.

self.collectionView.allowsMultipleSelection = false

И найти выбранное indexPath, используя.

for indexPath in self.collectionView.indexPathsForSelectedItems! {

}
0 голосов
/ 28 августа 2018

Кстати базовый фундамент

  1. Вы должны хранить каждый индекс, для которого пользователь выбирает любую ячейку, и удалять этот индекс из массива, когда пользователь отменяет выбор этого индекса.
  2. Когда пользователь нажимает кнопку, каждый раз, когда вам нужно перезагрузить эту ячейку и обновить статус кнопки как выбранный или нет.
  3. Когда пользователь нажимает кнопку Submit/Preview, вам нужно использовать массив индексов для отображения выбранных изображений.

Если вам не понятна процедура, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...