Обновите изображение на didSelectRow pickerView в Swift
Я делаю Viewer выбора клиента, состоящий из изображения и метки. это работает прекрасно. теперь я хочу обновить изображение выбранной строки средства выбора, например, отметку, если щелкнуть один раз, затем она будет отмечена, при повторном нажатии она будет снята (смена изображений). это также работает, но НЕ гладко, они так и должны. когда я выбираю строку, изображение не получало изменений сразу, но когда я прокручивал средство выбора, оно менялось. что я заметил, из-за того, что метод viewForRow вызывается позже, он не вызывается для didSelectRow. ниже мой код для viewForRow и DidSelectRow.
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let customeView = UIView(frame: CGRect(x: 0, y: 0, width: self.dropDown.rowSize(forComponent: 0).width, height: 30))
// for label
let label = UILabel(frame: CGRect(x: 0, y: 0, width: customeView.frame.width, height: 30))
label.textAlignment = .left
label.text = FilteredQuestionNames[row]
// for tick image, array contains all the images
let image = FilteredQuestion_Images[row]
imageView = UIImageView(image: image)
imageView?.frame = CGRect(x: self.dropDown.rowSize(forComponent: 0).width - 36 , y: 0, width: 26, height: 26)
customeView.addSubview(imageView!)
customeView.addSubview(label)//pickerLabel)
return customeView//pickerLabel
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if selectedRows.contains(QuestionsText.text!){
self.imageName = "Unchecked Checkbox-26"
}else{
selectedRows.append(QuestionsText.text!) // question added in selected question
self.imageName = "Checked Checkbox-26"
FilteredQuestion_Images[row] = UIImage(named: "Checked Checkbox-26")!
let image = FilteredQuestion_Images[row]
imageView = UIImageView(image: image)
}
1 ответ
Решение
Вы пропустили звонок pickerView.reloadComponent(component: yourComponentIndex)
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if selectedRows.contains(QuestionsText.text!){
self.imageName = "Unchecked Checkbox-26"
}else{
selectedRows.append(QuestionsText.text!) // question added in selected question
self.imageName = "Checked Checkbox-26"
FilteredQuestion_Images[row] = UIImage(named: "Checked Checkbox-26")!
let image = FilteredQuestion_Images[row]
imageView = UIImageView(image: image)
}
pickerView.reloadComponent(component: component)
}
Надеюсь это поможет