2016-04-15 83 views
0

我有一個表格視圖單元格以下類:開關更改影響其他行

class QuestionCell: UITableViewCell { 
    @IBOutlet weak var questionAnswer: UISwitch! 
    @IBOutlet weak var questionLabel: UILabel! 

    var data: Answer? 

    func configureForQuestion(data: Answer) { 
     print("configureForQuestion triggered") 
     questionLabel.text = data.question 
     self.data = data 
    } 

    @IBAction func questionAnswerChanged(sender: UISwitch) { 
     data?.answer = sender.on 
    } 
} 

該單元由一個標籤和開關。目前,當我改變第一行的開關狀態時,它也在改變最後一行。沒有其他行似乎以這種方式連接。我很難過這個。

額外的信息:

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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return answers.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier(TableView.CellIdentifiers.QuestionCell, forIndexPath: indexPath) as! QuestionCell 
    cell.configureForQuestion(answers[indexPath.row]) 
    return cell 
} 
+0

這是提示,tableView.dequeueReusableCellWithIdentifier()dequedCells正在創建問題。 – satheeshwaran

+0

@satheeshwaran所以我可以解決這個問題嗎? – user2363025

+0

所以,如果你在第2行切換開關是否影響其他任何事情,或者它只是發生在第1行總是?? – satheeshwaran

回答

0

您需要覆蓋單元格中的prepareForReuse並重置您的UI元素數據。

override func prepareForReuse() { 
    self.questionLabel.text = nil 
    self.questionAnswer.on = data?.answer 
} 
+0

最初我有questionAnswer.on = false在我的configureForQuestion函數,但這是一個問題,如果我打開一個開關並向下滾動tableview並備份,交換機將重置爲false :( – user2363025

+0

修復它 - 需要把questionAnswer.on = data.answer進入我的configureForQuestion函數! – user2363025

+0

很好!已批准的答案? – TomCobo

0

這可能是因爲您的answers陣列沒有所需的數據。在調試器中打印出answers的值,並查看每個answer是否具有您所期望的indexPath.row

你能告訴你如何設置answers中的值嗎?