【问题标题】:How can I send multiple selected items to server?如何将多个选定的项目发送到服务器?
【发布时间】:2019-12-17 23:37:34
【问题描述】:

所以我收集视图允许用户选择多个类别来展示他们的照片。当我选择一个单元格时,打印语句可以正常工作,它会按预期打印单元格 childValue 的名称。当我去提交帖子时,它只会将最后选择的索引上传到数据库。

问题的一个示例 - 如果我选择“打印”和“绿色”类别,则照片只会发布“绿色”,因为它是最后选择的索引。如何保存用户所做的所有选择并将帖子发送到选定的 childValues?



    var selectedCategoryValue = ""

    var trend: Trend!
    var style: Style!

    // When a cell is selected, the postID will be added to the correct childvalue that is relevent to the post
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if collectionView == trendCollectionView {


        switch selectedSegmentIndex {

        case 0: self.trend = femaleTrends[indexPath.row]
        print("You selected row \(trend.childValue)")


        self.selectedCategoryValue = trend.childValue


        case 1: self.trend = maleTrends[indexPath.row]
            print("You selected row \(trend.childValue)")
            self.selectedCategoryValue = trend.childValue

             default: break

        }


        } else {

          // Once I figure out how to store multiple selected values, I will complete else statement
            switch selectedSegmentIndex {

            case 0: self.style = femaleStyles[indexPath.row]
            case 1: self.style = maleStyles[indexPath.row]

                 default: break

            }


        }


    }

这是按下提交并将照片上传到服务器时使用的功能

    func uploadPostToCategory(withPostId postId: String) {

        let selectedValue = [postId: 1]
            switch trend.gender {
            case .female:
                // add postId to childValue based on cell selection
                FEMALE_TRENDS_REF.child(selectedCategoryValue).updateChildValues(selectedValue)

            case.male:
                MALE_TRENDS_REF.child(selectedCategoryValue).updateChildValues(selectedValue)

            }



        }

在此处的集合视图单元格内处理isSelected


   override var isSelected: Bool {
        didSet{
            if self.isSelected {
                trendCheckmark.isHidden = false

            }
            else {
                trendCheckmark.isHidden = true

            }
        }
    }

【问题讨论】:

    标签: swift xcode firebase-realtime-database uicollectionview


    【解决方案1】:

    似乎您只是在选择单元格时更改变量 selectedCategoryValue 并使其成为附加到的数组。

    所以:

    var selectedCategoryValues = [String]()

    然后当一个被选中时:

    self.selectedCategoryValues.append(trend.childValue)

    在您的 uploadPostToCategory 函数中,您将需要一个 for 循环来遍历所有 selectedCategoryValue,如下所示:

    func uploadPostToCategory(withPostId postId: String) {
        for selectedCategoryValue in selectedCategoryValues {
        let selectedValue = [postId: 1]
            switch trend.gender {
            case .female:
                // add postId to childValue based on cell selection
                FEMALE_TRENDS_REF.child(selectedCategoryValue).updateChildValues(selectedValue)
    
            case.male:
                MALE_TRENDS_REF.child(selectedCategoryValue).updateChildValues(selectedValue)
    
            }
           }
    
        }
    

    您也可以查看:self.collectionView.indexPathsForSelectedItems

    【讨论】:

    • 工作就像一个魅力,也非常感谢您的教育!快乐编码
    • 当然!如果您希望用户也能够取消选择项目,我会看看我建议的使用 indexPathsForSelected 项目的路径。
    • 是的,我一定会的,这是非常需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多