2017-08-08 22 views
0

日付の差をとり、その数のテーブルビューセルを作成するテーブルビューを作成しました。各テーブルビューのセルはtextviewとピッカービューで構成されています。問題は、私はPickerViewを使用して1位の値を選択するとき、選択された値は、他のセルに反映さcontorller
ためPickerViewテーブルビューのセル

コードは、ここでhfDetailsArr日差の総数

--function for getting date difference count { 
    let dateFormatter = DateFormatter() 

        dateFormatter.dateFormat = "dd/MM/yyyy" 
        let currentCalendar = NSCalendar.current 

        dateFormatter.date(from: dateFormatter.string(from:date1 as Date)) 

        let temp = currentCalendar.dateComponents([.day], from: dateFormatter.date(from: dateFormatter.string(from:date1 as Date))!, to: dateFormatter.date(from: dateFormatter.string(from:date2 as Date))!) 

        hfDetailsArr.removeAllObjects(); 
        //print(temp.day!) 

        if !(temp.day! < 0) && (temp.day! != 0) { 
        for i in 0 ..< (temp.day! + 1){ 
         let HFDetailsDates = currentCalendar.date(byAdding: .day, value: i, to: date1 as Date) 
         DataDetails = dateFormatter.string(from: HFDetailsDates!) 
         hfDetailsArr.add(DataDetails) 
         ApplyForDate.append(dateFormatter.string(from: HFDetailsDates!) + ",") 

         } 
       //print(ApplyForDate) 
        } 
      HFDEtailsTable.reloadData() 

} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if hfDetailsArr.count < 0 && hfDetailsArr.count != 0 { 
     return 0 
    }else{ 
    return hfDetailsArr.count 

    } 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell : HFDetailsCell! = tableView.dequeueReusableCell(withIdentifier: "cell") as! HFDetailsCell 

    cell.txtHFDateFeild.text = hfDetailsArr[indexPath.row] as? String 
     cell.cellDelegate = self 
    return cell 

} 
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     print("indeddsdsd \(indexPath.row)") 

} 

コードが含まれていますそれ

protocol HFDetailsCellDelegate : class { 
    func ValueSelectedChage(sender:HFDetailsCell ,Id:String ,selectedCell:String) 
} 

class HFDetailsCell: UITableViewCell,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource{ 

    @IBOutlet var txtHFPicker: UITextField! 
    @IBOutlet var txtHFDateFeild: UITextField! 
    @IBOutlet var pickerView: UIPickerView! = UIPickerView() 
    var HfDtailsOneArr = ["Select","Full Day Leave","Half Day Leave"] 
    var position = 0 
    //var intHFStatusDetail = "" 
    /// internal static var HFtableView = UITableView() 
    weak var cellDelegate: HFDetailsCellDelegate? 
    //var LeaveDataIDArr = [String?]() 

    override func awakeFromNib() { 
     txtHFDateFeild.delegate = self 
     pickerView.delegate = self 
     txtHFPicker.inputView = pickerView 
     pickerView.backgroundColor = UIColor.white 
     super.awakeFromNib() 
     // Initialization code 


    } 

    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

    @IBAction func txtleaveType(_ sender: UITextField) { 



    } 


//print("buttonclick") 

// //UIpickerView 
    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 
    //Set number of rows in components 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

     return self.HfDtailsOneArr.count 

    } 
    //Set title for each row 
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

     return HfDtailsOneArr[row] 


    } 
    // Update textfield text when row is selected 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     // self.cellDelegate?.ValueSelectedChage(sender:self, Id: HFDetailsLeaveCount(position: row), selectedCell: "") 
     txtHFPicker.text = HfDtailsOneArr[row] 
     print("pickerText:\(txtHFPicker.text!)") 

    } 
     func HFDetailsLeaveCount(position:Int)-> String { 

      switch position { 
      case 0: 
       return "0" 
      case 1: 
       return "8" 
      case 2: 
       return "4" 
      default: 
       return "nil" 
      } 

    } 
} 

Image1

内部pickerviewとのUITableView電池用上記画像における

Image2

iは日付04/08の値を選択した場合、同じ値が12/08

に反映されている - ヘルプの任意の種類は認識されるであろう。ピッカー選択呼出ValueSelectedChageデリゲートメソッドの表のセル内

+1

これは、セルが再利用可能であるためです。あなたはこれを処理する方法をGoogleにすることができますか、またはテーブルセルクラスprepareForReuse()に1つのメソッドがあります。これで、textView.text = ""を設定するので、セルを再利用するときは、セルを提供するまで以前の値を取ることはありません。 –

+0

@ TusharSharma私はこれを試しますが、それを行う他の方法があります –

+0

はい、あなたはGoogleにあなたを助けるものを見つける必要があります。関連する多くの質問があります。 –

答えて

2

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     self.cellDelegate?.ValueSelectedChage(sender:self, Id: HFDetailsLeaveCount(position: row), selectedCell: HfDtailsOneArr[row]) 
     txtHFPicker.text = HfDtailsOneArr[row] 
     print("pickerText:\(txtHFPicker.text!)") 
} 

は、デリゲートメソッド

func ValueSelectedChage(sender:HFDetailsCell ,Id:String ,selectedCell:String) { 
    let indexpath = self.tableView.indexPathForRowAtPoint(cell.center) 
    let key = "\(indexpath.row)" 
    hfSelectedDetails[key] = selectedCell 
    ....//other code if any 
} 
を実装するのViewControllerで選択した値

var hfSelectedDetails: [String: String?]? 

を維持するためのViewControllerで変数を作成いただきありがとうございます

およびcellForRow add

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell : HFDetailsCell! = tableView.dequeueReusableCell(withIdentifier: "cell") as! HFDetailsCell 

    cell.txtHFDateFeild.text = hfDetailsArr[indexPath.row] as? String 
    cell.cellDelegate = self 
    let key = "\(indexPath.row)" 
    if let selectedValue = hfSelectedDetails[key] { 
     cell.txtHFPicker.text = selectedValue 
    } else { 
     cell.txtHFPicker.text = nil 
    } 
    return cell 

}