0

我正在开发一个测验应用程序。我收到来自 API 的问题。我正在为选项使用 tableview。

现在,当用户选择第一个问题的答案并按下 Next 时,就会进入上一个问题。然后所选答案必须保持选中状态。

我研究了很多,发现了这个:

在 Swift 中以编程方式模拟 UITableViewController 中的选择

但我无法在表格视图中自动选择用户选择的答案。

这是我现在的用户界面

风险投资

func getOptions(){
    OptionArray.removeAll(keepCapacity: false)
    Alamofire.request(.GET, "http://www.wins.com/index.php/capp/get_chapter_answers/\(EID)/\(QuestionID[Qindex])")
        .responseJSON { (_, _, data, _) in
            println(data)
            let json = JSON(data!)
            let catCount = json.count
            for index in 0...catCount-1 {
                let disp = json[index]["DISPLAY_STATUS"].string
                if disp == "Y"{
                let op = json[index]["ANSWER"].string
                self.OptionArray.append(op!)
                let ans = json[index]["RIGHT_ANSWER"].string
                self.AnswerArray.append(ans!)
                }
            }
            self.OptionTable.reloadData()
            println(self.OptionArray.count)
    }
}

@IBAction func Previous(sender: AnyObject) {
    Qindex--
    ShowQuestion()
}


@IBAction func Next(sender: AnyObject) {
    Qindex++
    ShowQuestion()
   }


func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return self.OptionArray.count
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = self.OptionTable.dequeueReusableCellWithIdentifier("Option") as! OptionCell

    cell.Optionlabel?.text = self.OptionArray[indexPath.row]
    cell.layer.masksToBounds = true;
    cell.layer.cornerRadius = 6;
    cell.layer.borderWidth = 2.0
    cell.layer.borderColor = colorsArray[1].CGColor
    return cell

}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let indexPath = tableView.indexPathForSelectedRow();

    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! OptionCell;

    if currentCell.selected == true{
        currentCell.layer.borderWidth = 4.0
        currentCell.layer.borderColor = colorsArray[6].CGColor
        println(currentCell.Optionlabel?.text)
    }
}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {


    let currentCell = tableView.cellForRowAtIndexPath(indexPath) as! OptionCell;

    if currentCell.selected == false{
        currentCell.layer.borderWidth = 2.0
        currentCell.layer.borderColor = colorsArray[1].CGColor

    }
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 70
}

更新

  1. 我有超过 20 个问题。所以我必须分别保存每个问题的选定答案。

  2. 我无法使用 indexpath 位置选择答案,因为选项会在第二次访问时随机更改它的位置。

4

1 回答 1

1

您可以这样做:当您按下时next,将所选答案的索引存储到一个变量中,当您返回时previous,检查willDisplayCell方法中的索引并设置您选择的单元格。

在你的控制器中取一个变量

var selectedAnsIndexPath:NSIndexPath?

您的下一个按钮操作将类似于

@IBAction func Next(sender: AnyObject) {
   self.selectedAnsIndexPath = tableView.indexPathForSelectedRow()
    Qindex++
    ShowQuestion()
}

接着

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    if(indexPath == self.selectedAnsIndexPath) 
    {
        cell.setSelected(true, animated: false)
    }
}

试试这个,它可能对你有用!

更新

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

let cell = self.OptionTable.dequeueReusableCellWithIdentifier("Option") as! OptionCell 

cell.Optionlabel?.text = self.OptionArray[indexPath.row] 
cell.QueID = QuestionID[Qindex] 
cell.layer.masksToBounds = true; 
cell.layer.cornerRadius = 6; 
cell.layer.borderWidth = 2.0 
cell.layer.borderColor = colorsArray[1].CGColor 


if let val = examDic[cell.QueID] 
{ 
    if self.OptionArray[indexPath.row] == val 
    { 
        selectedAnsIndexPath = indexPath 
        cell.setSelected(true, animated: true) 
        cell.layer.borderWidth = 4.0 
        cell.layer.borderColor = colorsArray[6].CGColor 
    } 
} 

return cell 

} 

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

if selectedAnsIndexPath != nil{ 
    OptionTable.deselectRowAtIndexPath(selectedAnsIndexPath!, animated: false) 
    self.tableView(OptionTable, didDeselectRowAtIndexPath: selectedAnsIndexPath!) 
    println(selectedAnsIndexPath!.row) 
} 

let indexPath = OptionTable.indexPathForSelectedRow(); 
let currentCell = OptionTable.cellForRowAtIndexPath(indexPath!) as! OptionCell; 

if currentCell.selected == true{ 
    currentCell.layer.borderWidth = 4.0 
    currentCell.layer.borderColor = colorsArray[6].CGColor 
    var sqid = QuestionID[Qindex] 
    var sanswer = currentCell.Optionlabel!.text 
    examDic[sqid] = sanswer! 
    println(examDic) 
} 
}
于 2015-09-10T13:16:26.490 回答