2017-08-08 132 views
0

我已經創建了一個tableview,它採用日期差異和創建該數量的tableview單元格,每個表格視圖單元格由textview和和選擇器視圖對Textview挑選值。的問題是當我挑選值用於使用PickerView然後在1位所選擇的值也反映在其他細胞PickerView裏面tableView單元格

爲contorller代碼
這裏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

在上述圖像

如果我選擇日期04/08值,那麼相同的值被反映爲12/08

- 任何形式的幫助將不勝感激。謝謝

+1

這是因爲單元格是可重用的。你可以谷歌如何處理這個或有一個方法在表格單元格類prepareForReuse()。在這裏你設置textView.text =「」,所以當單元格被重用時,它將不會取得先前的值,直到你提供一個。 –

+0

@TusharSharma我會嘗試這個,但有沒有其他的方式 –

+0

是的,你需要谷歌,並找到可以幫助你的東西。有很多相關的問題。 –

回答

2

表格單元格,在選擇器選擇呼叫ValueSelectedChage委託方法

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!)") 
} 

在ViewController中創建一個變量來選擇的值

var hfSelectedDetails: [String: String?]? 

在視圖控制器實現委託方法

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 
} 

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 

}