2017-10-19 1 views
0

나는 라벨과 이미지로 구성된 pickerView가 있습니다. 나는 pickerview가 그 특별한 것에 도청 될 때 저 심상을 새롭게하고있다. 하지만 이미지의 변화를 보여 주려면 pickerView를 다시로드해야합니다. 내가 다시로드하면 첫 번째 행으로 돌아갑니다. pickerView의 특정 행만 다시로드 할 수있는 방법이 있습니까?신속한 PickerView의 특정 행 다시로드

코드 : ViewForRow의

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

        } 
       } 

코드 :

 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 
} 

답변

0

그러한 시스템 방법. 사용자 정의보기를 사용하는 경우에는, 당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

(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

'UIPickerViewDelegate'의''public function pickerView (_ pickerView : UIPickerView, viewForRow 행 : Int, forComponent 컴포넌트 : Int, 재사용 뷰 : UIView?) -> UIView' 메서드를 구현 했습니까? –

+0

예. 사용하고 있습니다. –

관련 문제