2017-10-19 6 views
0

Ich habe eine PickerView, bestehend aus einem Etikett und Bild. Ich aktualisiere dieses Bild, wenn Pickerview auf diesen bestimmten angeklickt wird. aber um die Änderung des Bildes zu zeigen, muss ich PickerView neu laden. und wenn ich neu lade geht es zurück in die erste Reihe. Gibt es eine Möglichkeit, nur diese bestimmte Reihe von PickerView neu zu laden?Reload bestimmte Reihe von PickerView in Swift

Code:

if selectedRows.contains(contactPerson.text!) { 
         FilteredQuestion_Images[row] = UIImage(named: "Unchecked Checkbox-26")! 
        let image = FilteredQuestion_Images[row] 
        imageView = UIImageView(image: image) 

        if let itemToRemoveIndex = selectedRows.index(of: contactPerson.text!) { 
         selectedRows.remove(at: itemToRemoveIndex) 
         ContactPersons_Multiple.remove(at: itemToRemoveIndex) 
        } 

        self.dropdownPicker.reloadAllComponents() 

       }else { 


        selectedRows.append(contactPerson.text!) 
        self.imageName = "Checked Checkbox-26" 

        FilteredQuestion_Images[row] = UIImage(named: "Checked Checkbox-26")! 

        let image = FilteredQuestion_Images[row] 
        imageView = UIImageView(image: image) 

        self.dropdownPicker.reloadAllComponents() 

        } 
       } 

Code of ViewForRow:

 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.dropdownPicker.rowSize(forComponent: 0).width, height: 30)) 

      // for label 
      let label = UILabel(frame: CGRect(x: 0, y: 0, width: customeView.frame.width - 35, height: 30)) 
      label.textAlignment = .left 

      label.text = self.ContactPers[row] 

      if FilteredContactsSelected == true { 
       label.text = FilteredContactsNames[row] 
      } 


      let image = FilteredQuestion_Images[row]//UIImage(named: imageName) 
      imageView = UIImageView(image: image) 



      imageView?.frame = CGRect(x: self.dropdownPicker.rowSize(forComponent: 0).width - 36 , y: 0, width: 26, height: 26) 

      customeView.addSubview(imageView!) 
      customeView.addSubview(label)//pickerLabel) 

      return customeView//pickerLabel 
} 

Antwort

0

kein solches System Methode. wenn Sie benutzerdefinierte Ansicht jedoch verwenden, können Sie so etwas wie dies versuchen:

(pickerView.view(forRow: <#T##Int#>, forComponent: <#T##Int#>) as? MyCustomView).image = newImage 

Edit:

Zuerst müssen Sie Ansicht Tags zu Ihrer benutzerdefinierten Ansicht Elemente hinzufügen müssen (zwei Konstanten definieren können this):

Und nachdem eine Auswahl auftritt, müssen Sie den Status Ihrer Ansicht aktualisieren. Sie können das tun, indem Sie:

if let myView = pickerView.view(forRow: row, forComponent: 0) as? UIView, 
     let label = myView.viewWithTag(10) as? UILabel, 
     let imageView = myView.viewWithTag(20) as? UIImageView{ 

     label.text = FilteredContactsNames[row] 
     imageView.image = ilteredQuestion_Images[row] 
} 
+0

wo genau das nennen? –

+0

Haben Sie 'optionale öffentliche func pickerView implementiert (_ PickerView: UIPickerView, viewForRow Zeile: Int, forComponent Komponente: Int, wiederverwenden Ansicht: UIView?) -> UIView' Methode von' UIPickerViewDelegate'? –

+0

Ja, ich benutze es. –

Verwandte Themen