在swift中重新加载pickerView的特定行

问题描述:

我有一个pickerView由一个标签和图像组成。当pickerview被点击时,我正在更新该图像。但要显示图像的变化,我必须重新加载pickerView。当我重新加载它回到第一行。有没有办法重新加载只有特定行的pickerView?在swift中重新加载pickerView的特定行

代码:

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() 

        } 
       } 

代码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 
} 

没有这样的系统的方法。但是,如果您使用的是自定义视图,你可以尝试这样的事:

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

编辑:

首先,你需要,你需要查看标签添加到您的自定义视图元素(可以定义两个常量这个):

label.tag = 10 
imageView.tag = 20 

而选择发生后,你需要刷新你的视图的状态。你可以这样做:

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

在哪里准确地调用它? –

+0

你实现了'可选公共func pickerView(_ pickerView:UIPickerView,viewForRow行:Int,forComponent组件:Int,重用view:UIView?) - > UIVick'方法'UIPickerViewDelegate'? –

+0

是的,我正在使用它。 –