ios - 从 UITableView 的每个部分中选择的行(多项选择)

标签 ios swift uitableview

我使用了tableview(分组)。

所以我需要从 UITableviewSection 的每个部分中选择一行。

因此,我有表格 View 和一个提交按钮。因此,当我单击提交按钮时,我需要检查我是否从每个部分中选择了一行,如果没有,则显示警报为未选择节号。如何查看?

这是我的数据。

{
    "data":[
              {
               "question": "Gender",
               "options": ["Male","Female"]
              },
              {
               "question": "How old are you",
               "options": ["Under 18","Age 18 to 24","Age 25 to 40","Age 41 to 60","Above 60"]
              },
              {
               "question": "I am filling the Questionnaire for?",
               "options": ["Myself","Mychild","Partner","Others"]
              }
            ]


}

问题模型:-

class QuestionListModel: NSObject {
     var selected = false

    var dataListArray33:[NH_OptionsModel] = []


    var id:Int!
    var question:String!
    var buttontype:String!
    var options:[String]?
    var v:String?

      var optionsModelArray:[OptionsModel] = []
    init(dictionary :JSONDictionary) {

        guard   let question = dictionary["question"] as? String,
            let typebutton = dictionary["button_type"] as? String,

                let id = dictionary["id"] as? Int
             else {
                return

        }



        if let options = dictionary["options"] as? [String]{
            print(options)

           print(options)


            for values in options{

                print(values)

                let optionmodel = OptionsModel(values: values)
                self.optionsModelArray.append(optionmodel)

            }


        }


        self.buttontype = typebutton
        self.question = question
        self.id = id
    //   print(self.dataListArray33)
                   }

}

选项型号:-

class OptionsModel: NSObject {

    var isSelected:Bool? = false

  var v:String?
        var values:String?



     init(values:String) {

           self.values = values
           print( self.values)

        }

View 模型:-

     func numberOfSections(tableView: UITableView) -> Int{
            print((datasourceModel.dataListArray?.count)!)
            return (datasourceModel.dataListArray?.count)!
        }

        func titleForHeaderInSection(atsection section: Int) -> NH_QuestionListModel {
            return datasourceModel.dataListArray![section]
        }

        func numberOfRowsIn(section:Int) -> Int {

            print( datasourceModel.dataListArray?[section].optionsModelArray.count ?? 0)
            return datasourceModel.dataListArray?[section].optionsModelArray.count ?? 0
            // return self.questionsModelArray?[section].optionsModelArray.count ?? 0
        }

        func datafordisplay(atindex indexPath: IndexPath) -> NH_OptionsModel{

            print(datasourceModel.dataListArray![indexPath.section].optionsModelArray[indexPath.row])

            return datasourceModel.dataListArray![indexPath.section].optionsModelArray[indexPath.row]

        }
 func question(answer:String)  {
        print(questions)
        questions.append(answer)
        print(questions )



    }

    func questionlist(answer:String)  {
        print( questionlist )
        questionlist.append(answer)
        print( questionlist )



    }
    func answer(answer:String)  {
      answers.append(answer)
               print(answers)



    }

最后是viewController:-

func numberOfSections(in tableView: UITableView) -> Int {
        return questionViewModel.numberOfSections(tableView: tableView)
    }


    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {


        let identifier = "HeaderCell"

        var headercell: questionheader! = tableView.dequeueReusableCell(withIdentifier: identifier) as? questionheader

        if headercell == nil {
            tableView.register(UINib(nibName: "questionheader", bundle: nil), forCellReuseIdentifier: identifier)
            headercell = tableView.dequeueReusableCell(withIdentifier: identifier) as? NH_questionheader
        }

        headercell.setReviewData(reviews:questionViewModel.titleForHeaderInSection(atsection:section))




        return headercell
    }



    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

        return 150

    }



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return questionViewModel.numberOfRowsIn(section: section)
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let identifier = "Cell"
        var cell: QuestionListCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? QuestionListCell

        if cell == nil {
            tableView.register(UINib(nibName: "QuestionListCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? NH_QuestionListCell
        }
        cell.contentView.backgroundColor = UIColor.clear


        let questionsModel = questionViewModel.titleForHeaderInSection(atsection:indexPath.section)
        print(questionsModel.buttontype)

        questionViewModel.button = questionsModel.buttontype


        cell.setOptions(Options1: questionViewModel.datafordisplay(atindex: indexPath))

         print("Section \(indexPath.section), Row : \(indexPath.row)")


        return cell

    }





    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){


        print("Section \(indexPath.section), Row : \(indexPath.row)")


        let cell = tableview.cellForRow(at: indexPath) as? NH_QuestionListCell

        let model = questionViewModel.datafordisplay(atindex: indexPath)

        print(model.isSelected)


        cell?.setOptions(OptionsSelected:questionViewModel.datafordisplay(atindex: indexPath))
        print(model.isSelected)
        questionViewModel.isselected = model.isSelected!



        let section = indexPath.section
        let index = indexPath.row
        print(section)
        print(index)



        if !questionViewModel.selectedIndexPaths.contains(indexPath) {

            questionViewModel.selectedIndexPaths.append(indexPath)
            print(questionViewModel.selectedIndexPaths.append(indexPath))


            let questionModel = questionViewModel.titleForHeaderInSection(atsection: section)
            print(questionModel.question)


            questionViewModel.question = questionModel.question
            questionViewModel.questionlist(answer: questionViewModel.question!)


            let cell = tableview.cellForRow(at: indexPath) as? NH_QuestionListCell

            let model = questionViewModel.datafordisplay(atindex: indexPath)
            print(model.values)

            questionViewModel.answer(answer: model.values!)

            let value: Int = questionModel.id
                let string = String(describing: value)
                //let x: Int? = Int(model.id)

            questionViewModel.question_id = string
            questionViewModel.question(answer: questionViewModel.question_id!)

            print(questionModel.id)

            // append the selected index paths
        }       //  if indexPath.section == section {
       //     questionViewModel.indexPath(indexPaths: index)
       // }


            }

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {




        if let index = questionViewModel.selectedIndexPaths.index(of: indexPath) {
            print(index)
            questionViewModel.selectedIndexPaths.remove(at: index)
        }



}

根据这个我得到了输出。 但我在 View Controller 中有按钮操作。

@IBAction func forward(_ sender: AnyObject) {
}

在此按钮操作中,我需要检查是否从每个部分中选择了一行。如果不显示警报。该怎么做

我当前的 didselect 方法:-

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
 let cell = tableview.cellForRow(at: indexPath) as? NH_QuestionListCell

            let model = questionViewModel.datafordisplay(atindex: indexPath)

            print(model.isSelected)


            cell?.setOptions(OptionsSelected:questionViewModel.datafordisplay(atindex: indexPath))
            print(model.isSelected)
            questionViewModel.isselected = model.isSelected!



            let section = indexPath.section
            let index = indexPath.row
            print(section)
            print(index)


            if !questionViewModel.selectedIndexPaths.contains(indexPath) {

                questionViewModel.selectedIndexPaths.append(indexPath)
                print(questionViewModel.selectedIndexPaths.append(indexPath))


                let questionModel = questionViewModel.titleForHeaderInSection(atsection: section)
                print(questionModel.question)


                questionViewModel.question = questionModel.question
                questionViewModel.questionlist(answer: questionViewModel.question!)


                let cell = tableview.cellForRow(at: indexPath) as? NH_QuestionListCell

                let model = questionViewModel.datafordisplay(atindex: indexPath)
                print(model.values)

                questionViewModel.answer(answer: model.values!)

                let value: Int = questionModel.id
                    let string = String(describing: value)
                    //let x: Int? = Int(model.id)

                questionViewModel.question_id = string
                questionViewModel.question(answer: questionViewModel.question_id!)

                print(questionModel.id)

                          }

我有3个数组 根据这个didselect方法:-

例如:-对于第 1 部分:-我选择了第一行,因此数据附加如下。

questionlist:["How r u?"]
answelist:["fine"]

但是假设我认为我需要第二个索引路径,所以我需要从数组中删除以前附加的数据并附加当前数据。如下所示:

questionlist:["How r u?"]
answelist:["not well"]

接下来是第2部分:我选择了第一个indexpath.row数据。然后该数据被追加。所以我需要得到如下:-

 questionlist:["How r u?","Gender"]
    answelist:["not well","Male"]

在这里选择我认为我需要第二个选项,然后从数组中删除添加的indexpath.row数据并显示为:-

 questionlist:["How r u?","Gender"]
        answelist:["not well","Female"]

这样怎么设置?

最佳答案

您可以根据选择更新模型,例如

"data":[
              {
              "question": "Gender",
              "options": ["Male","Female"],
              "optionSelected": "Male"

              }
              ]

然后在“提交”上检查选择的数据

关于ios - 从 UITableView 的每个部分中选择的行(多项选择),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52162726/

相关文章:

swift - 展开可选时发现 nil - 在 Swift 4 中设置标签文本

arrays - 如何从字符串数组中获取文本并将其用作按钮的文本?

ios - Firebase 监听 currentUser 属性的变化

iOS - 如何在前置摄像头顶部添加 sceneKit 节点对象。不是 ArKit

ios - 如何具有动态值的等值水平约束

ios - 在 Swift 中归档 UIBezierPath

ios - UItableview 有两组选项

ios - 删除和添加随表格行移动的按钮

ios - 将单元格放在表格 View 的特定部分

ios - 如何选择 iOS 模拟器作为 Xcode 中的目的地?