How to allow multiple UICollectionViewCells to be selected and deselected?












0















I have a UICollectionView (with .allowsMultipleSelection = true), and I want it so that whenever I tap on a cell, it changes color, and when I tap it again, it reverts to its old color. I understand that UICollectionViewCells have a isSelected property, so I've tried manipulating that to change the colors.



override var isSelected: Bool {
didSet {
if isSelected == false {
contentView.backgroundColor = .lightGray
roleLabel.textColor = .gray
} else {
contentView.backgroundColor = .gray
roleLabel.textColor = .black
print("selected")
}
}
}


My the view controller class that contains the collection view in question has defined didSelectItemAt. However, whenever I tap on the cell, "selected" is printed each time - meaning regardless of how many times I've tapped on the cell, it still sets isSelected to be true each time - and the color doesn't change. Why is this happening?










share|improve this question























  • Can you make sure that, after selecting a cell A , then selecting another cell B, then trying to deselecting cell A works for you or not ?

    – Ratul Sharker
    Nov 25 '18 at 20:28











  • I tried that, it still keeps selecting A again.

    – Kevin2566
    Nov 25 '18 at 21:03
















0















I have a UICollectionView (with .allowsMultipleSelection = true), and I want it so that whenever I tap on a cell, it changes color, and when I tap it again, it reverts to its old color. I understand that UICollectionViewCells have a isSelected property, so I've tried manipulating that to change the colors.



override var isSelected: Bool {
didSet {
if isSelected == false {
contentView.backgroundColor = .lightGray
roleLabel.textColor = .gray
} else {
contentView.backgroundColor = .gray
roleLabel.textColor = .black
print("selected")
}
}
}


My the view controller class that contains the collection view in question has defined didSelectItemAt. However, whenever I tap on the cell, "selected" is printed each time - meaning regardless of how many times I've tapped on the cell, it still sets isSelected to be true each time - and the color doesn't change. Why is this happening?










share|improve this question























  • Can you make sure that, after selecting a cell A , then selecting another cell B, then trying to deselecting cell A works for you or not ?

    – Ratul Sharker
    Nov 25 '18 at 20:28











  • I tried that, it still keeps selecting A again.

    – Kevin2566
    Nov 25 '18 at 21:03














0












0








0








I have a UICollectionView (with .allowsMultipleSelection = true), and I want it so that whenever I tap on a cell, it changes color, and when I tap it again, it reverts to its old color. I understand that UICollectionViewCells have a isSelected property, so I've tried manipulating that to change the colors.



override var isSelected: Bool {
didSet {
if isSelected == false {
contentView.backgroundColor = .lightGray
roleLabel.textColor = .gray
} else {
contentView.backgroundColor = .gray
roleLabel.textColor = .black
print("selected")
}
}
}


My the view controller class that contains the collection view in question has defined didSelectItemAt. However, whenever I tap on the cell, "selected" is printed each time - meaning regardless of how many times I've tapped on the cell, it still sets isSelected to be true each time - and the color doesn't change. Why is this happening?










share|improve this question














I have a UICollectionView (with .allowsMultipleSelection = true), and I want it so that whenever I tap on a cell, it changes color, and when I tap it again, it reverts to its old color. I understand that UICollectionViewCells have a isSelected property, so I've tried manipulating that to change the colors.



override var isSelected: Bool {
didSet {
if isSelected == false {
contentView.backgroundColor = .lightGray
roleLabel.textColor = .gray
} else {
contentView.backgroundColor = .gray
roleLabel.textColor = .black
print("selected")
}
}
}


My the view controller class that contains the collection view in question has defined didSelectItemAt. However, whenever I tap on the cell, "selected" is printed each time - meaning regardless of how many times I've tapped on the cell, it still sets isSelected to be true each time - and the color doesn't change. Why is this happening?







ios swift uicollectionview uicollectionviewcell






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 25 '18 at 20:06









Kevin2566Kevin2566

146




146













  • Can you make sure that, after selecting a cell A , then selecting another cell B, then trying to deselecting cell A works for you or not ?

    – Ratul Sharker
    Nov 25 '18 at 20:28











  • I tried that, it still keeps selecting A again.

    – Kevin2566
    Nov 25 '18 at 21:03



















  • Can you make sure that, after selecting a cell A , then selecting another cell B, then trying to deselecting cell A works for you or not ?

    – Ratul Sharker
    Nov 25 '18 at 20:28











  • I tried that, it still keeps selecting A again.

    – Kevin2566
    Nov 25 '18 at 21:03

















Can you make sure that, after selecting a cell A , then selecting another cell B, then trying to deselecting cell A works for you or not ?

– Ratul Sharker
Nov 25 '18 at 20:28





Can you make sure that, after selecting a cell A , then selecting another cell B, then trying to deselecting cell A works for you or not ?

– Ratul Sharker
Nov 25 '18 at 20:28













I tried that, it still keeps selecting A again.

– Kevin2566
Nov 25 '18 at 21:03





I tried that, it still keeps selecting A again.

– Kevin2566
Nov 25 '18 at 21:03












1 Answer
1






active

oldest

votes


















0














you have to Store your selected cell in array.for example just store indexpath of selected Cell in Array than Check if indexpath is Already present in Array that means it is Already Selected.



var slectedCell = [IndexPath]()

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


if slectedCell.contains(indexPath) {
cell.backgroundColor = UIColor.gray
slectedCell = slectedCell.filter { $0 != indexPath }
}
else {
slectedCell.append(indexPath)
cell.backgroundColor = UIColor.lightGray
}

}


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

if slectedCell.contains(indexPath) {
cell.backgroundColor = UIColor.gray
}
else {
cell.backgroundColor = UIColor.lightGray
}


}





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53471420%2fhow-to-allow-multiple-uicollectionviewcells-to-be-selected-and-deselected%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    you have to Store your selected cell in array.for example just store indexpath of selected Cell in Array than Check if indexpath is Already present in Array that means it is Already Selected.



    var slectedCell = [IndexPath]()

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


    if slectedCell.contains(indexPath) {
    cell.backgroundColor = UIColor.gray
    slectedCell = slectedCell.filter { $0 != indexPath }
    }
    else {
    slectedCell.append(indexPath)
    cell.backgroundColor = UIColor.lightGray
    }

    }


    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    if slectedCell.contains(indexPath) {
    cell.backgroundColor = UIColor.gray
    }
    else {
    cell.backgroundColor = UIColor.lightGray
    }


    }





    share|improve this answer




























      0














      you have to Store your selected cell in array.for example just store indexpath of selected Cell in Array than Check if indexpath is Already present in Array that means it is Already Selected.



      var slectedCell = [IndexPath]()

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


      if slectedCell.contains(indexPath) {
      cell.backgroundColor = UIColor.gray
      slectedCell = slectedCell.filter { $0 != indexPath }
      }
      else {
      slectedCell.append(indexPath)
      cell.backgroundColor = UIColor.lightGray
      }

      }


      func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

      if slectedCell.contains(indexPath) {
      cell.backgroundColor = UIColor.gray
      }
      else {
      cell.backgroundColor = UIColor.lightGray
      }


      }





      share|improve this answer


























        0












        0








        0







        you have to Store your selected cell in array.for example just store indexpath of selected Cell in Array than Check if indexpath is Already present in Array that means it is Already Selected.



        var slectedCell = [IndexPath]()

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


        if slectedCell.contains(indexPath) {
        cell.backgroundColor = UIColor.gray
        slectedCell = slectedCell.filter { $0 != indexPath }
        }
        else {
        slectedCell.append(indexPath)
        cell.backgroundColor = UIColor.lightGray
        }

        }


        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        if slectedCell.contains(indexPath) {
        cell.backgroundColor = UIColor.gray
        }
        else {
        cell.backgroundColor = UIColor.lightGray
        }


        }





        share|improve this answer













        you have to Store your selected cell in array.for example just store indexpath of selected Cell in Array than Check if indexpath is Already present in Array that means it is Already Selected.



        var slectedCell = [IndexPath]()

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


        if slectedCell.contains(indexPath) {
        cell.backgroundColor = UIColor.gray
        slectedCell = slectedCell.filter { $0 != indexPath }
        }
        else {
        slectedCell.append(indexPath)
        cell.backgroundColor = UIColor.lightGray
        }

        }


        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        if slectedCell.contains(indexPath) {
        cell.backgroundColor = UIColor.gray
        }
        else {
        cell.backgroundColor = UIColor.lightGray
        }


        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 27 '18 at 12:47









        Bhavesh.iosDevBhavesh.iosDev

        592215




        592215
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53471420%2fhow-to-allow-multiple-uicollectionviewcells-to-be-selected-and-deselected%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Tonle Sap (See)

            I get strange results when I access the Sqlitedatabase with Unity C# via XAMPP

            Guatemaltekische Davis-Cup-Mannschaft